2016-07-19 12 views
1

このような割り当ての理由は何ですか?ワイルドカードを使用した課題の実際のアプリケーションとは何ですか?

List<? extends Fruit> flist = new ArrayList<Apple>(); 
// flist.add(new Apple()); 
// flist.add(new Fruit()); 
// flist.add(new Object()); 

Appleコンテナをフルーツコンテナにアップキャストすると、その中に何も追加できなくなります。

私たちは何か行うことができます知っている:

List<Apple> basket = new ArrayList<Apple>(); 
//Fill the basket with tons of juicy apples 
List<? extends Fruit> fruitContainer = basket; 

をそして、我々はfruitContainerで開催された要素を使用するフルーツインタフェースを使用することである可能性があります。しかし、の実用的な理由は、後で何も追加できない場合、このようなことをすることができますか?

List<? extends Fruit> flist = new ArrayList<Apple>(); 

答えて

0

その行が取ら全体おそらく何の実用化を持っていませんが、あなたはあなたの質問で述べてきたように、部品のそれぞれは、それのList<? extends Fruit> flistnew ArrayList<Apple>())、別途、実用的なを持っていますつかいます。それらは有効で有用ですが、組み合わせてはなりません(あなたのリストに何かを入れる必要がない限り)。それがコンパイルされているため、各パーツが有効です。プログラマは私たちに合理的かつ有用な方法でそれらを組み合わせることができます。

+0

質問は次のようなものです。なぜプログラマはそのようなことをするべきですか? 現実的なシナリオを見つけることができますか? :) – acejazz

+0

@acejazz:私の最初の文章はそれをカバーしています。私はそれを行うための実用的な理由はないと思います。(後で言いますが、実際にリストに何も追加する必要はありません。 –

関連する問題