java如何创建通用的单例类
这是我当前的代码:java如何创建通用的单例类,java,generics,singleton,Java,Generics,Singleton,这是我当前的代码: import java.util.ArrayList; public class SingletonAList<T> { private final ArrayList<T> aL = new ArrayList<T>(); SingletonAList() {} public ArrayList<T> getList(T t) { return aL; } } import java.ut
import java.util.ArrayList;
public class SingletonAList<T> {
private final ArrayList<T> aL = new ArrayList<T>();
SingletonAList() {}
public ArrayList<T> getList(T t) {
return aL;
}
}
import java.util.ArrayList;
公共阶级单音主义者{
私有最终ArrayList aL=新ArrayList();
单音(){}
公共阵列列表getList(T){
返回aL;
}
}
我想做的是让它返回一个类型的单例列表(如果存在);如果不创建一个新的类型T
例如,进行了三个getList调用
getList(Obj1);
getList(Obj2);
getList(Obj1);
On first getList a new ArrayList<Obj1> would be created;
on second getList a new ArrayList<Obj2> would be created;
and on third getList the same arrayList from the first call would be returned.
getList(Obj1);
getList(Obj2);
getList(Obj1);
在第一个getList上,将创建一个新的ArrayList;
在第二个getList上,将创建一个新的ArrayList;
在第三个getList上,将返回第一个调用中的相同arrayList。
有什么实施建议吗?我一直在胡闹…似乎新的调用必须在getList调用中;可能还有另一个已经实例化的类型列表?一个解决方案可能类似于:
public class SingletonAList {
private static Map<Class, List> lists = new HashMap<Class, List>();
public static <T> List<T> getInstance(Class<T> klass) {
if (!lists.containsKey(klass)) {
lists.put(klass, new ArrayList<T>());
}
return lists.get(klass);
}
}
公共类单音演员{
私有静态映射列表=新HashMap();
公共静态列表getInstance(类klass){
如果(!lists.containsKey(klass)){
lists.put(klass,newarraylist());
}
返回列表。获取(klass);
}
}
之后,可以使用
SingletonAList.getInstance(String.class)调用它代码>由于类型擦除,您无法执行此操作。(除非您使用映射>
)“第一个…将被创建;第二个…将被创建”;您知道“singleton”中的“single”代表什么吗?我以前也做过类似的事情,我的实现使用了映射,就像@SLaks建议的那样。@Holger:@SLaks:那又怎样?我在这篇文章中没有看到“singleton”这个词。那应该是类
是的,在键入时忘记它们:)更正了现在它们太多了,你不能将
放在列表
变量声明中。现在你使用的是原始类型-你应该使用通配符类型,例如类
。