下面的犯罪示例在Android Studio上出现错误“Collection
无法转换为LinkedList
”:
class Factory<F extends Factory<F>> {
public <T extends Collection<?>> T empty(Class<T> clazz) {
try {
return clazz.newInstance();
} catch (Exception e) {
throw new Error(e);
}
}
}
class MyFactory extends Factory {
// ERROR is displayed here
LinkedList<?> list = empty(LinkedList.class);
}
我试图删除该错误,但无法弄清楚问题是什么。构造T create(Class<T> clazz)
应该是有效的并且为我工作了很多次。所以转换不应该是问题而且错误根本没有用。
答案 0 :(得分:0)
花了我几个小时来创建一个最小的exmaple(我的原始项目更复杂,涉及Android特定代码)。当我将最小的例子复制到eclipse时,我发现我忘了将MyFactory
上的模板参数添加到extend Factory<MyFactory>
。 Eclipse给了我一个扩展原始类型的警告。该raw-type不提供成员函数empty()
的通用参数,并返回Collection
而不是T extends Collection
。
Android Studio实际上可以在原始类型上创建警告,但默认情况下会禁用它。请参阅this thread了解如何启用它。
我希望这可以帮助遇到同样问题的人。