转换错误
问题描述:
的一个错误如下因素miminal例如resuts在Android工作室“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)
应该是有效的,并为我多次工作。所以转换不应该是问题,并且错误根本没有帮助。
答
花了我好几个小时来创建一个最小的exmaple(我的原始项目更复杂,涉及Android特定的代码)。当我将最小的例子复制到eclipse中时,我发现我忘记了在MyFactory
到extend Factory<MyFactory>
之间添加模板参数。 Eclipse给了我一个警告来扩展原始类型。原始类型不提供成员函数empty()
的一般参数,并返回Collection
而不是T extends Collection
。
Android Studio实际上可以在原始类型上创建警告,但默认情况下它是禁用的。有关如何启用它,请参阅this thread。
我希望这可以帮助遇到同样问题的人。