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

projoy 2011-09-01 05:56:54
我有一个接口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;为什么不行呢?
...全文
213 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingluo 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qybao 的回复:]
1
public ArrayList<? extends Animal> getAnimals(){
ArrayList<cat> cats = new ArrayList<cat>();
...........
return cats;
}

2
因为ArrayList<Animal> cats 里可以保存非cat对象
所以ArrayList<cat> cs = c……
[/Quote]

++
小绵羊 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qybao 的回复:]
引用 5 楼 projoy 的回复:
所以ArrayList<cat> cs = cats;JVM不知道cats里会不会保留了非cat对象,为了安全,拒绝转换
我还有疑问,为什么
ArrayList<Animal> cats = new ArrayList<cat>();不可以呢,会出现Type mismatch: cannot convert from ArrayList<cat> to ……
[/Quote]
+1
qybao 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 projoy 的回复:]
所以ArrayList<cat> cs = cats;JVM不知道cats里会不会保留了非cat对象,为了安全,拒绝转换
我还有疑问,为什么
ArrayList<Animal> cats = new ArrayList<cat>();不可以呢,会出现Type mismatch: cannot convert from ArrayList<cat> to ArrayList<Animal>
A……
[/Quote]
ArrayList<Animal> cats = new ArrayList<Animal>(); //要前后类型一致
或者
ArrayList<? extends Animal> cats = new ArrayList<cat>(); //?代表Animal的子类
要区分集合类型和集合元素?ArrayList<Animal> cats 声明一个集合类型 cats, 是ArrayList<Animal>类型,所以能给cats赋值的必须是ArrayList<Animal>类型的值,ArrayList<cat>不是ArrayList<Animal>类型,所以不能赋值,而集合元素,因为cat是Animal的子类,所以cats可以保存cat对象,即cats.add(cat)可以。


projoy 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应该能保存其子类的东西把
完美灬缺陷 2011-09-01
  • 打赏
  • 举报
回复
ArrayList<Animal> animals= getAnimals();

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

qybao 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对象,为了安全,拒绝转换



projoy 2011-09-01
  • 打赏
  • 举报
回复
Type mismatch: cannot convert from ArrayList<cat> to ArrayList<Animal>
会出现这个错误亚
ChangeZ_ 2011-09-01
  • 打赏
  • 举报
回复
你可以这样:
ArrayList<Animal> cats = new ArrayList<cat>();
return cats;
这样就没错了。
java object 转list_java - 如何将ArrayList 转换为ArrayList java - 如何将ArrayList 转换为ArrayListArrayList list = new ArrayList();list.add(1);list.add("Java");list.add(3.14);System.out.println(list.toString());我试过了:ArrayList list2 = (String)list;但它...

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧