Java泛型类型转换

时间:2013-07-15 10:01:10

标签: java

以下是示例代码:

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>

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

2 个答案:

答案 0 :(得分:6)

你可能想要

public static <T extends Item> BaseListAdapter<T> getListAdapter() {

答案 1 :(得分:0)

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

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