+ -
当前位置:首页 → 问答吧 → ArrayList<接口> 如何类型转换成ArrayList<实现>

ArrayList<接口> 如何类型转换成ArrayList<实现>

时间:2011-09-01

来源:互联网

我有一个接口interface Animal.

有一个类cat implements Animal

有一个函数是返回Animal的list
 public ArrayList<Animal> getAnimals(){
  ArrayList<cat> cats = new ArrayList<cat>();
  ...........
  return cats;//为什么会出错?Type mismatch: cannot convert from ArrayList<cat> to ArrayList<Animal>
}

第二个问题是
比如我使用ArrayList<Animal> cats = getAnimals();
则ArrayList<cat> cs = cats;为什么不行呢?

作者: projoy   发布时间: 2011-09-01

你可以这样:
ArrayList<Animal> cats = new ArrayList<cat>();
return cats;
这样就没错了。

作者: mousepc228891   发布时间: 2011-09-01

Type mismatch: cannot convert from ArrayList<cat> to ArrayList<Animal>
会出现这个错误亚

作者: projoy   发布时间: 2011-09-01

1
public ArrayList<? extends Animal> getAnimals(){
  ArrayList<cat> cats = new ArrayList<cat>();
  ...........
  return cats;
}

2
因为ArrayList<Animal> cats 里可以保存非cat对象
所以ArrayList<cat> cs = cats;JVM不知道cats里会不会保留了非cat对象,为了安全,拒绝转换



作者: qybao   发布时间: 2011-09-01

ArrayList<Animal> animals= getAnimals();

那就迭代在这样强转一下
(cat)animals.get(i);

作者: huangchenliang   发布时间: 2011-09-01

所以ArrayList<cat> cs = cats;JVM不知道cats里会不会保留了非cat对象,为了安全,拒绝转换
我还有疑问,为什么
ArrayList<Animal> cats = new ArrayList<cat>();不可以呢,会出现Type mismatch: cannot convert from ArrayList<cat> to ArrayList<Animal>
Animal应该能保存其子类的东西把

作者: projoy   发布时间: 2011-09-01

热门下载

更多