3 回答

TA貢獻(xiàn)1804條經(jīng)驗 獲得超2個贊
代碼很爛...
List<myCustomObject>.class
錯了只能是List.class
List
是一個接口,List.class.newInstance();
無論如何調(diào)用都會拋出異常即使你會做這樣的代碼:
List<myCustomClass> myList = new ArrayList(); Object myResult = executeGetRequest("myList", myList.getClass());
你將myResult
作為ArrayList
班級的實例回來......
您需要重新考慮您嘗試實現(xiàn)的目標(biāo) - 取回myCustomClass
對象列表或新實例myCustomClass
順便說一句:在運行時有一個“類型擦除”,并且無法獲取List
fromList
實現(xiàn)中的對象類型。
總之在運行時它總是 List<Object>

TA貢獻(xiàn)1876條經(jīng)驗 獲得超6個贊
如果您總是返回項目列表,則List<T>用作返回類型:
public class Main {
public static <T> List<T> executeGetRequest(String target, Class<T> resultClass) throws IllegalAccessException, InstantiationException {
T item = resultClass.newInstance();
List<T> result = new ArrayList<>();
result.add(item);
return result;
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
executeGetRequest("myList", Foo.class);
}
static class Foo {
}

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
不要使用Class<T>參數(shù)和反射(即Class.newInstance())。使用 aSupplier<T>代替:
public static <T> T executeGetRequest(String target, Supplier<T> factory) {
// MY STUFF
T result = factory.get();
return result;
}
然后,按如下方式調(diào)用它:
List<myCustomObject> result = executeGetRequest("myList", () -> new ArrayList<>());
您甚至可以<>在創(chuàng)建 時使用菱形運算符 ( ) ArrayList,因為這是由編譯器從左側(cè)推斷出來的(即List<myCustomObject>)。
您還可以使用方法引用:
List<myCustomObject> result = executeGetRequest("myList", ArrayList::new);
添加回答
舉報