我想将一个 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();
}
最佳答案
您可以泛化 Class
至 Class<T>
然后使用 T
:
public static <T> void createList(Class<T> cls) {
ArrayList<T> = new ArrayList<>();
}
扩展一下,如果你需要从一个列表中找到一个类或其子类的所有实例,并将结果值作为列表返回,你可以这样做:
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;
}
有人建议说这不能做,做也没有意义,但确实很有道理。
还建议 original
参数使用有界类型,比如 List<? super T>
.同样,这将是无用的,它不会增加类型安全性,但实际上会降低方法本身的用处。
像现在一样,你可以使用该方法来过滤实现接口(interface)的实例,例如,假设我们有
List<SomeClass> lst;
...
filterInstancesOf(lst, Serializable.class);
如果方法使用有界类型,则不能使用,如SomeClass
不是 Serializable
的父类(super class).
关于java - 如何使用 Class 对象声明指定类型的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051373/