假设我们正在处理以下设置:
A extends B
主要作用:
public void doIt() {
List<A> listOfA = new ArrayList<A>();
listOfA.add(new A());
listOfA.add(new A());
C c = new C();
// We know that really, listOfA is going to be modified
// in some way and will be returned to us, thus, it is
// ok to cast result back to what we know it to be
List<A> a = (List<A>) c.doSomethingWithListOfA(listOfA);
}
何时 C
有一个方法
public List<? extends B> doSomethingWithListOfA(List<? extends B>
listOfObjectsThatExtendB) {
return someFormofListA;
}
(List) c.doSomethingWithListOfA(listOfA) 的类型转换;返回 - Type safety: Unchecked cast from List<capture#1-of ? extends B> to List<A>
警告。
我想知道这是否可能是因为其他一些类也可能扩展 B,从而使编译器不确定它实际上是扩展 B 的 A 列表还是可能扩展 B 的 X 列表?
除了抑制警告之外,如何检查这一点? (未经检查的类型转换)
最佳答案
它不是类型安全的,因为该方法可以返回属于 B 子类型的任何类型的列表——它可能是也可能不是 A。
这样写怎么样:
public <T extends B> List<T> doSomethingWithListOfA(List<T> listOfObjectsThatExtendB) {
return listOfObjectsThatExtendB;
}
现在不再需要强制转换:
List<A> a = c.doSomethingWithListOfA(listOfA);
关于java - 未经检查的 Actor 警告,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769973/