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

标签 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();
}

最佳答案

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

相关文章:

java - 将集合从一种类型转换为另一种类型的策略

java - Spring 3 : @OneToOne unidirectional generate java. sql.SQLException: ORA-00918

html - GTM : Click trigger for button with many nested classes

java - 在随机索引处插入项目时,ArrayList 与 LinkedList?

c++ - 为什么我的代码应该显示 "Yes"却显示 "No"?

python - Python 中的 __new__ 和 __init__

java - 通过 ArrayList 正在更新 + Java

java - POJO 应该连接到 View 还是 Controller ?

java - 如何在java中有效地读取一个巨大的文本文件并分割其内容以对其进行排序?

java - 创建 URL - 使用 uri.parse/uri.builder/concatenate 字符串有什么区别?