java - 如何将对象类型作为参数传递给构造函数并将变量转换为它(JAVA)?
问题描述
我有一个接受 aArrayList<?>
作为构造函数参数的类:
public class Test {
public Test (ArrayList<?> data) {
}
}
我想转换data
为ArrayList<Type>
,并作为参数传递Type
给构造函数,如下所示:
public class Test {
public Test (ArrayList<?> data, Class type) {
ArrayList<Type> newData = (ArrayList<type>) data;
}
}
我如何在 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();
推荐阅读
- javascript - Javascript函数中未定义的Angular变量?
- python - Python 3 Selenium 选择下拉菜单。无法找到下拉菜单
- vb.net - 如何在 vb.net 中获取 WINWORD 进程的所有实例
- php - Laravel 自定义多重身份验证
- c# - 如何通过 REST API .net 以二进制形式返回图像(不是 url)
- android - 无法在 android kotlin 中添加两个数字
- c# - 用 WebClient 替换不推荐使用的 FtpWebRequest 时,如何使用 ascii 模式?
- node.js - 从 getstream 总看不见的计数不超过 100
- ios - 如何在swift中从google place api获取地点图像
- ios - SwiftUI:如何“滑动删除”嵌套 ForEach 中的元素(分组)