Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java如何创建通用的单例类_Java_Generics_Singleton - Fatal编程技术网

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”这个词。那应该是
是的,在键入时忘记它们:)更正了现在它们太多了,你不能将
放在
列表
变量声明中。现在你使用的是原始类型-你应该使用通配符类型,例如