我想实现一个通用的单件工厂模式,我将所需对象的Class作为参数传递,如果已经为它创建了一个对象,工厂类应检查映射,如果它已经从map返回该对象.如果没有,请创建一个新实例,将其放在地图中并返回实例.
我可以将泛型返回类型作为Object,但我不想在我调用get实例方法的每个地方强制转换返回的对象.
下面是代码:我在c.cast(实例)行收到编译错误;
我们不使用spring/dependency注入,而是尝试实现公共类来处理创建所有单例对象.
提前致谢.
public class SingletonFactory {
public static Map<String,Object> objectFactory = new HashMap<String, Object>();
public static <T extends Object> T getInstance(Class<?> c){
String key = c.toString();
Object instance= objectFactory.get(key);
if(instance == null){
synchronized (c) {
try{
instance = c.newInstance();
objectFactory.put(key, instance);
}catch(IllegalAccessException | InstantiationException e){
throw new RuntimeException("Exception while creating singleton instance for class : "+key+" - Exception Message : "+e);
}
}
}
return c.cast(instance);
}
Run Code Online (Sandbox Code Playgroud)
}