这是示例代码:

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>

我想知道为什么会产生此警告以及如何解决它。

最佳答案

这是因为尽管BaseListAdapter接受从Item扩展的任何类型,但是您将任何类型的BaseListAdapter显式转换为类型T的BaseListAdapter,该类型不一定是相同的类型,因此会出现错误。

如果要修复它,则需要完全避免强制转换,而是使用Item进行管理,或者使BaseListAdapter句柄T而不是一些未命名的类型?扩展项目。

关于java - Java泛型类型转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17651548/

10-10 13:14