[英]How to pass an object type to constructor as argument and cast a variable to it (JAVA)?
我有一個 class 接受ArrayList<?>
作為構造函數參數:
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 實例指向的Class
public <T> Test(ArrayList<?> data, Class<T> type) {
ArrayList<T> newData = (ArrayList<T>) data;
}
但這並不安全,因為您只是假設每個 object 都適合 class,您最好逐個轉換每個 object
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));
}
從Class<T> type
實例化 object
T item = type.getDeclaredConstructor().newInstance();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.