首页 > 解决方案 > 如何将对象类型作为参数传递给构造函数并将变量转换为它(JAVA)?

问题描述

我有一个接受 aArrayList<?>作为构造函数参数的类:

public class Test {

    public Test (ArrayList<?> data) {

    }
}

我想转换dataArrayList<Type>,并作为参数传递Type给构造函数,如下所示:

public class Test {

    public Test (ArrayList<?> data, Class type) {
        ArrayList<Type> newData = (ArrayList<type>) data;
    }
}

我如何在 Java 中做到这一点?

标签: java

解决方案


您必须使用泛型参数来获取Class实例指向的类

public <T> Test(ArrayList<?> data, Class<T> type) {
    ArrayList<T> newData = (ArrayList<T>) data;
}

但这并不安全,因为您只是假设每个对象都适合该类,您最好将每个对象一个一个地投射

public <T> Test(ArrayList<?> data, Class<T> type) {
    ArrayList<T> newData = data.stream().map(o -> (T) o).collect(Collectors.toCollection(ArrayList::new));
}

多个班级

public <T, U> Test(ArrayList<?> data1, Class<T> type1, ArrayList<?> data2, Class<U> type2) {
    ArrayList<T> newData1 = data1.stream().map(o -> (T) o).collect(Collectors.toCollection(ArrayList::new));
    ArrayList<U> newData2 = data2.stream().map(o -> (U) o).collect(Collectors.toCollection(ArrayList::new));
}

从 a 中实例化一个对象Class<T> type

T item = type.getDeclaredConstructor().newInstance();

推荐阅读