繁体   English   中英

带有扩展对象的ArrayList ClassCastException

[英]ArrayList ClassCastException with extended object

我不知道该标题的确切发音,但这是问题所在

我有一个对象B的ArrayList

对象B扩展对象A

我想将对象A的元素添加到ArrayList 我觉得我应该能够这样做,因为对象A是对象B的简单版本(或者我应该说对象B是对象A的子集)

但是我得到ClassCastException ,同时将扩展对象保留为单独对象的解决方案是什么?

正如Liskov替代原则所指出的:

在计算机程序中,如果S是T的子类型,则可以将T类型的对象替换为S类型的对象。

这意味着如果您有:

class Animal {}

class Dog extends Animal {}

这样做很有意义:

Animal animal = new Dog();

但是这样做是错误的:

Dog dog = new Animal();

这正是您在做什么。 您可能想要实现的目标是:

List<Animal> list = new ArrayList<Animal>();
list.add(new Animal());
list.add(new Dog());

如果有一个ArrayList<B>中,可以添加任何B秒和亚类B 但是您不能添加A因为A不是B子类。

如果要混合AB ,请尝试ArrayList<A> 您可以在此处添加两者,因为BA子类。 使用多态时,请始终以最通用的类​​作为参数声明通用数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM