3

这是示例代码:

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>

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

4

2 回答 2

6

你可能想要

public static <T extends Item> BaseListAdapter<T> getListAdapter() {
于 2013-07-15T10:05:21.050 回答
0

这是因为当 BaseListAdapter 接受从 Item 扩展的任何类型时,您将具有任何 ol' 类型的 BaseListAdapter 显式转换为具有类型 T 的 BaseListAdapter,这不一定是相同的类型,因此会出现错误。

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

于 2013-07-15T10:07:05.763 回答