1

这是一个两部分的问题。

我有两个类:AnimalVehicle将把它们实例化为对象。Animal包含两个实例变量:numLegsanimalName,并且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)。我该如何正确处理?

4

2 回答 2

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()方法。

说了这么多,我真的很困惑为什么这是必要的。也许如果您解释更大的图景,我可以给您更完整的答案。

于 2012-05-05T22:13:41.797 回答
0

If you want to have a list containing two or more entities with nothing in common then you will always need to specialize your code to address each of them. This Box class is completlly useless.

Object o = list.get(0);
if(o instanceof Animal) {
   System.out.println(((Animal)o).getName());
}
于 2012-05-05T22:34:08.450 回答