gpt4 book ai didi

java - 如何使用 Class 对象声明指定类型的 ArrayList

转载 作者:行者123 更新时间:2023-11-30 07:02:33 28 4
gpt4 key购买 nike

我想将一个 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();
}

最佳答案

您可以泛化 ClassClass<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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com