我在Java中使用泛型方法,我想使用自定义对象的列表作为参数。
我的主类是这样的:
public class Main {
public static <T> T executeGetRequest(String target, Class<T> resultClass) {
//MY STUFF
T result = resultClass.newInstance();
return result;
}
public static void main(String[] args) {
executeGetRequest("myList", List<myCustomObject>.class); // ERROR HERE
}
}
我想使用List<myCustomeObject>
作为参数,当我使用List.class
时,没有错误,但我不确定结果是否会转换为myCustomObject
。
4条答案
按热度按时间rkkpypqq1#
密码很破...
List<myCustomObject>.class
错误,只能是List.class
List
是一个接口,调用List.class.newInstance();
将引发异常1.即使您将执行如下代码:
List<myCustomClass> myList = new ArrayList(); Object myResult = executeGetRequest("myList", myList.getClass());
您将返回
myResult
作为ArrayList
类的示例...您需要重新考虑您尝试实现的目标是什么-取回
myCustomClass
对象的列表还是myCustomClass
的新示例顺便说一句:在运行时有一个“类型擦除”,没有办法从
List
实现中获得List
中的对象类型。简而言之,在运行时它始终为
List<Object>
ijnw1ujt2#
如果总是返回项目列表,则使用
List<T>
作为返回类型:eqqqjvef3#
不要使用
Class<T>
参数沿着reflection(即Class.newInstance()
),而是使用Supplier<T>
:然后,按如下方式调用它:
您甚至可以在创建
ArrayList
时使用菱形运算符(<>
),因为这是由编译器从左手推导出来的(即List<myCustomObject>
)。也可以使用方法引用:
taor4pac4#
如果使用Spring:
并使用
代替