Tih*_*hom 3 java generics casting list
我觉得这很愚蠢,但我是.
该行在List<HasId> ids = list以下代码中给出了编译错误:
public class MyGarbageClass {
public void myMethod(List<MyCompany> list){
List<HasId> ids = list;
}
interface HasId {
int getId();
}
class MyCompany implements HasId{
private int id = 5;
@Override
public int getId() {
return id;
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyCompany实现了HasId所以我认为我应该能够分配它.为什么我不能?而且更重要的是,什么是分配给该对象的HasId列表的简单方法.
更新:列表ids = (List<HasId>)list;打破不可转换的类型
不允许这样的通用赋值的原因是可以进行转换,然后添加一些ids不是MyCompany的东西(也许MyPerson也实现了HasId).因此,如果演员被允许,那么你可以这样做.
public void myMethod(List<MyCompany> list){
List<HasId> ids = list;
ids.add(new MyPerson());
}
Run Code Online (Sandbox Code Playgroud)
现在该列表打破了通用保证,因为您有<MyCompany>一个声明为MyPerson的列表.
你可以像这样投射它.
public void myMethod(List<MyCompany> list){
List<? extends HasId> ids = list;
}
Run Code Online (Sandbox Code Playgroud)
但是不允许使用add()操作,但如果您愿意,可以迭代它以获取id.