以下是示例代码:
public static BaseListAdapter<? extends Item> getListAdapter() {
...
}
...
public class MyClass<T extends Item> {
...
BaseListAdapter<T> adapter = (BaseListAdapter<T>) getListAdapter();
...
}
编译器抱怨说有一个未经检查的演员。
java: unchecked cast
need: BaseListAdapter<T>
found: BaseListAdapter<capture#1, ? extends Item>
我想知道为什么会产生此警告以及如何解决此问题。
答案 0 :(得分:6)
你可能想要
public static <T extends Item> BaseListAdapter<T> getListAdapter() {
答案 1 :(得分:0)
这是因为当BaseListAdapter接受从Item扩展的任何类型时,您明确地将具有任何ol'类型的BaseListAdapter转换为类型为T的BaseListAdapter,这不一定是相同类型,因此是错误。
如果你想修复它,那么你需要完全避免强制转换并使用Item来管理或者使BaseListAdapter处理T而不是一些未命名的类型?扩展项目。