泛型扩展

时间:2013-03-25 09:24:41

标签: java generics

有一种方法:

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>>(){})

不确定这里有什么问题。有什么建议吗?

2 个答案:

答案 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>强制转换。