1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
import java.util.HashMap;
import java.util.Map;
import java.lang.reflect.Method;
/**
*
* @author Ian Schneider
*/
public abstract class GenericSingleton {
static Map<Class,Object> lookup = new HashMap<Class,Object>();
public static synchronized <T extends Object> T instance(Class<T> c) {
T instance = c.cast(lookup.get(c));
if (instance == null) {
try {
instance = c.cast(c.newInstance());
lookup.put(c,instance);
} catch (Exception e) {
return null;
}
}
return instance;
}
static class Foo extends GenericSingleton {
}
public static void main(String[] args) {
Foo f = GenericSingleton.instance(Foo.class);
System.out.println(f);
System.out.println(GenericSingleton.instance(Foo.class) == GenericSingleton.instance(Foo.class));
}
} |