Java 未检查的铸件警告,需要澄清
假设我们正在处理以下设置:Java 未检查的铸件警告,需要澄清,java,warnings,Java,Warnings,假设我们正在处理以下设置: A extends B Main的职责是: 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 //
A extends B
Main的职责是:
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.doSomethingWithListOfA(listOfA)的演员阵容;返回时显示-类型安全:未选中从列表到列表的强制转换
警告
我想知道这是否可能是因为其他类也可能扩展B,从而使编译器不确定扩展B的实际上是a列表还是X列表?
除此之外,如何检查警告?(未选中强制转换)它不是类型安全的,因为该方法可以返回任何类型的列表,这些类型是B的子类型,可能是a,也可能不是a 写这个怎么样:
public <T extends B> List<T> doSomethingWithListOfA(List<T> listOfObjectsThatExtendB) {
return listOfObjectsThatExtendB;
}
公共列表doSomethingWithListOfA(对象列表hatExtendDB){
返回对象列表hatExtendDB;
}
现在不再需要铸造:
List<A> a = c.doSomethingWithListOfA(listOfA);
List a=c.doSomethingWithListOfA(listOfA);
List<A> a = c.doSomethingWithListOfA(listOfA);