有一种方法:
protected List<? extends Object> retrieveData(TypeReference<List<? extends Object>> ref)
当我尝试应用它时:
return (List<SomeClass>) retrieveData(new TypeReference<List<SomeClass>>() {});
我收到此通知
中的方法
retrieveData(TypeReference<List<? extends Object>>)
类型AbstractJsonService不适用于参数(new TypeReference<List<SomeClass>>(){})
不确定这里有什么问题。有什么建议吗?
答案 0 :(得分:3)
也许您可以尝试使用以下方法签名:
protected <E> E retrieveData(TypeReference<E> ref)
答案 1 :(得分:1)
Not sure what's wrong here. Any suggestions?
类型<? extends Object>
在方法体中是未知的,此类型可能是List<SomeClass>
的实例。编译器无法确定并阻止返回List<SomeClass>
。
当使用protected <T> T retrieveData(TypeReference<T> ref)
时,你有一个T的“固定”类型,编译器肯定知道返回的类型与TypeReference
的类型相同。除此之外,编译器能够在调用方法时将类型T推断为List<SomeClass>
:retrieveData(new TypeReference<List<SomeClass>>)
,不再需要执行List<SomeClass>
强制转换。