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 - 我可以这样实现 HttpSessionListener 吗?

java - 如何多次打印一个数组?

java - 获取 Java 中默认系统信任库的 SSLContext(JSEE)

python - 在不定义 __init__ 函数的情况下创建类的实例

c++ - 类中动态分配的数组

java - 如何获取一串字母(用户输入)并用 X 分隔所有重复字符?

java - 在 Apache Tomcat 服务器上部署 GWT 应用程序时出现 500 内部服务器错误

php - 你能帮助我更好地理解 PHP 类吗?

java - 按每个字符串中逗号后的值按字母顺序对 ArrayList 进行排序