2017-05-19 6 views
3

Javaには新規ではありませんが、この質問は私を悩ましています。私は確固たる基盤を持っていないと思う。Javaは関数の引数としてクラスを継承します

はのは、クラスABCB extends AC extends Aがあるとしましょう。私の質問は、List<A>List<B>List<C>のいずれかを引数に取ることができるように、どのようにしてメソッドf()を定義できますか?

+1

これは、使用する方法によって異なります。 – shmosel

答えて

6

は、上位有界ワイルドカードを使用します

f(List<? extends A> list) 

の詳細についてはOracle's tutorialを参照してください。

この方法では、メソッド本体のリストからオブジェクトを取り出せないように制限されています。リスト上のコンシューマメソッドを呼び出すことはできません。

A item = list.get(0); // OK. 
list.add(new A());  // Not OK! list might be a List<B>. 
関連する問題