首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型链接列表-如何添加不同的对象

泛型链接列表-如何添加不同的对象
EN

Stack Overflow用户
提问于 2015-02-05 14:46:38
回答 5查看 1.7K关注 0票数 1

我已经创建了一个链接列表,但我似乎无法理解如何将不同的对象插入到同一个列表中。假设我有一个列表,我想包含猫和狗两种类型的对象,这可能吗?我知道如何只插入猫,或者只插入狗,但我似乎不知道如何将两者插入到同一个列表中。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-05 14:51:19

您希望使用它们的“最低”公共类或公共接口,以便尽可能多地了解列表元素(以及您需要的内容)。

如果两个类DogCat 都扩展了类 Animal,并且希望表示动物列表,则可以这样做:

代码语言:javascript
运行
复制
List<Animal> animals = new YourList<Animal>();
for (Animal animal: animals){
    // use some Animal method
    animal.eat();
}

如果两个都实现了接口 TailOwner,并且希望在列表成员上使用来自该接口的操作,则可以这样做:

代码语言:javascript
运行
复制
List<TailOwner> tailOwners = new YourList<TailOwner>();
for (TailOwner tailOwner: tailOwners){
    // use some TailOwner method
    tailOwner.wiggle();
}

如果您不确定,您可以始终回到Object,因为所有的Java类都对它进行了扩展:

代码语言:javascript
运行
复制
List<Object> objects = new YourList<Object>();
for (Object object: objects){
    // use some Object method
    System.out.println(tailOwner.toString());
}

通常,当您在同一个列表中有两个对象时,它们确实有--

无论哪种方法,当您将Cat-specific或Dog-specific方法放到列表中时(在将它们转换回任何方法之前),您都会放弃它们。

当您使用列表中的对象时,良好的层次结构可以防止转换,并促进多态性。有关在编译时从列表中检索到的对象,您可以知道的是它们至少符合列表的泛型类型。

票数 2
EN

Stack Overflow用户

发布于 2015-02-05 14:48:29

如果CatDog没有任何共同之处,则可以使用Object参数化LinkedList

代码语言:javascript
运行
复制
List<Object> list = new LinkedList<Object>();

这样,您就可以同时添加CatDog,但请注意,这可能会迫使您每次从列表中检索对象时都要检查类型。

票数 1
EN

Stack Overflow用户

发布于 2015-02-05 14:56:36

您只能添加implements相同接口或extends相同类的元素。

代码语言:javascript
运行
复制
class Animal {}

class Cat extends Animal{}

class Dog extends Animal{}

List<Animal> animals = new LinkedList<Animal>;
animals.add(new Cat());
animals.add(new Dog());

代码语言:javascript
运行
复制
interface Animal {}

class Cat implements Animal{}

class Dog implements Animal{}

List<Animal> animals = new LinkedList<Animal>;
animals.add(new Cat());
animals.add(new Dog());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28346905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档