java - 将类类型作为参数传递以在 ArrayList 中使用?

标签 java class arraylist reflection

我需要编写一个 java 方法,它接受一个类(而不是一个对象),然后用该类创建一个 ArrayList 作为数组中每个成员的元素。伪代码示例:

public void insertData(String className, String fileName) {
      ArrayList<className> newList = new ArrayList<className>();
}

我如何在 Java 中完成此操作?

最佳答案

您可以使用 Generic methods

public <T> void insertData(Class<T> clazz, String fileName) {
   List<T> newList = new ArrayList<>();
}

但是如果您应该使用此协定 insertData(String className, String fileName),则不能使用泛型,因为 Java 无法在编译时解析列表项的类型。

在这种情况下,您可以根本不使用泛型,而是在将类型放入列表之前使用反射来检查类型:

public void insertData(String className, String fileName) {
    List newList = new ArrayList();

    Class clazz;
    try {
        clazz = Class.forName(className);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e); // provide proper handling of ClassNotFoundException 
    }

    Object a1 = getSomeObjectFromSomewhere();

    if (clazz.isInstance(a1)) {
        newList.add(a1);
    }
    // some additional code
}

但如果没有类信息,您只能使用 Object,因为您无法在代码中将对象转换为 UnknownClass。

关于java - 将类类型作为参数传递以在 ArrayList 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42069745/

相关文章:

java - 如何结合Swing和SpringFramework?

java - React Native - 值 '3130049174' 不适合 32 位有符号整数

C++:获取类实例的大小

php - PHP 中的 OOP : Class-function from a variable?

c# - 从非托管 C# DLL 返回列表/数组

java - 如何使用定时器而不产生延迟?

java - 用于简单 java 桌面应用程序的数据库服务器

php - 将 DB 对象传递到多次扩展的类中的简单方法

java - 如何在数组中查找元素?以及如何将带有声明方法的变量添加到数组列表中?

android垃圾收集器,释放对象内部的对象