将类类型作为参数传递给ArrayList使用?

Gre*_*rch 5 java reflection class arraylist

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

public void insertData(String className, String fileName) {
      ArrayList<className> newList = new ArrayList<className>();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Java中实现这一目标?

Vla*_*nin 5

您可以使用泛型方法

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

但是如果你应该使用这个契约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
}
Run Code Online (Sandbox Code Playgroud)

但是如果没有类的信息,您就可以使用,Object因为您无法在代码中将对象强制转换为 UnknownClass。