The*_*K93 2 java class arraylist
我想将一个Class对象传递给一个函数,然后声明一个类所在类型的ArrayList.我想知道我是怎么做到的.
public static void CreateList(Class c){
// I want to create this array list using the variable c to define its type
ArrayList<c> list = new ArrayList();
}
Run Code Online (Sandbox Code Playgroud)
您可以对Classto 进行泛化Class<T>,然后使用T:
public static <T> void createList(Class<T> cls) {
ArrayList<T> = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
要展开,如果需要从列表中查找类的所有实例或其子类,并将结果值作为列表返回,则可以执行以下操作:
public static <T> List<T> filterInstancesOf(List<?> original, Class<T> cls) {
List<T> rv = new ArrayList<>();
for (Object o: original) {
if (cls.isInstance(o)) {
rv.add(cls.cast(o));
}
}
return rv;
}
Run Code Online (Sandbox Code Playgroud)
有人建议不能这样做,做起来没有意义,但确实有很多意义.
还有人建议original参数使用有界类型List<? super T>.再次,这将是无用的,它不会增加类型安全性,但实际上使方法本身不那么有用.
就像现在一样,您可以使用该方法过滤实现接口的实例,例如,假设我们有
List<SomeClass> lst;
...
filterInstancesOf(lst, Serializable.class);
Run Code Online (Sandbox Code Playgroud)
如果方法使用有界类型,则不能使用,因为SomeClass不是超类Serializable.