这是一个2部分问题。
我有两个类:Animal
和Vehicle
我将实例化为对象。 Animal
包含两个实例变量:numLegs
和animalName
,Vehicle
包含一个实例变量:numTires
,两个类都包含getter和setter。
我有一个通用类Box
,它包含Animal
或Vehicle
。
假设我想要创建Arraylist
个框。所述Box
中的每个Arraylist
都将仅包含Animal
类型或仅包含Vehicle
类型。
List<Box<Animal>> list = new ArrayList<Box<Animal>>();
list.add( new Box<Animal>( new Animal( "fluffy", 4 ) ) );
(1)。盒子类应该是什么样的?
另外,假设我想从列表中对动物进行吸气。
例如:System.out.println(list.get(0).getName());
(2)。我该如何正确地解决这个问题?
答案 0 :(得分:1)
我不确定你要追求的是什么,但是如果你想要一个通用类型的Box
类,它可能需要看起来像这样:
public class Box<T extends SuperclassOfAnimalAndVehicle> {
T myModeOfTransport;
Box(T myModeOfTransport) {
this.myModeOfTransport = myModeOfTransport;
}
public T getModeOfTransport() {
return myModeOfTransport;
}
}
这一行:list.get(0).getName()
不会这样做。您必须获取Box
包含的对象。因此,使用我的示例,它将是list.get(0).getModeOfTransport().getName()
,假设Vehicle
和Animal
都有getName()
方法。
所有这一切,我真的很困惑为什么这是必要的。也许如果你解释了更大的图片,我可以给你一个更完整的答案。
答案 1 :(得分:0)
如果您想要一个包含两个或多个没有任何共同点的实体的列表,那么您将始终需要专门化代码来解决每个实体。这个Box
类完全没用。
Object o = list.get(0);
if(o instanceof Animal) {
System.out.println(((Animal)o).getName());
}