2012-05-05 13 views
1

これは2つの部分の質問です。一般的なarraylistを作成する

私はオブジェクトとしてインスタンス化するAnimalVehicleの2つのクラスを持っています。両方のクラスは、ゲッターとセッターを含んで、numTiresAnimalは、二つのインスタンス変数が含ま:numLegsanimalNameを、そしてVehicle 1つのインスタンス変数が含まれています。

私はAnimalまたはVehicleのいずれかを保持する汎用クラスBoxを持っています。

ボックスのArraylistを作成するとします。前記ArraylistBoxは、すべて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)。私はこれについて適切にどうやって行くのですか?

+2

'Animal'と' Vehicle'の両方を含むクラスを持つことはちょっと混乱します。これは、あなたが良い解決策を考え出すのに苦労している理由です。共通のクラスを持つ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に含まれるオブジェクトを取得する必要があります。したがって、私の例を使用すると、VehicleAnimalの両方がgetName()の方法を持っていると仮定すると、list.get(0).getModeOfTransport().getName()になります。

私は本当にこれが必要な理由について本当に混乱しています。もしあなたが大きな写真を説明したら、私はあなたにもっと完全な答えを与えることができました。

+0

大丈夫、応答のためのtyvm。しかし、この場合、SuperclassOfAnimalAndVehnicleはどのように見えますか? 車両に名前がない場合、getName()メソッドを車両に実装することはプロフェッショナルではないと思われますか? –

+0

@StephenSiegel私が言ったように、 'Box' *のようなものは本当に知りません。それはなぜ存在するのですか?それは何をするためのものか?スーパークラスを共有できるようにオブジェクトにメソッドを追加するのは良いことではありませんが、あなたがしなければならないものである 'Animal'と' Vehicle'を含むことができる単一の一般的に型付けされた 'Box'クラスが必要な場合。私が言ったように、あなたが私にいくつかの情報を与えるならば、私はあなたに何をする必要があるかについてより良い考えを与えることができます。 –

+0

@StephenSiegel:空の抽象親クラスを持つことは問題ありません。 –

0

何も共通しない2つ以上のエンティティを含むリストを作成したい場合は、それぞれを扱うコードを特別に作成する必要があります。このBoxクラスは完全に役に立たない。

Object o = list.get(0); 
if(o instanceof Animal) { 
    System.out.println(((Animal)o).getName()); 
} 
関連する問題