2016-07-19 7 views
1

Was ist der Grund für eine solche Aufgabe?Was ist die praktische Anwendung einer Zuweisung mit einem Platzhalter?

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

Sobald wir den Apple-Container in einem Obst-Container "upcast", können wir nichts hinzufügen.

weiß ich, dass wir so etwas wie tun könnte:

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

Und dann könnten wir die Frucht Schnittstelle zu verwenden Lage sein, die Elemente von fruitContainer gehalten zu verwenden. Aber was kann der praktische Grund sein, etwas so zu tun, wenn wir nichts später hinzufügen können?

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

Antwort

0

Diese Linie ein Ganzes hat wahrscheinlich keinen praktischen Nutzen, aber wie Sie in Ihrer Frage bemerkt haben, jeder der den Teile davon (List<? extends Fruit> flist und new ArrayList<Apple>()), separat, eine praktische benutzen. Sie sind beide gültig und nützlich, nur nicht in Kombination (es sei denn, Sie müssen nichts in Ihre Liste einfügen). Deshalb kompiliert es, jeder der Teile ist gültig; Es liegt an uns, den Programmierern, sie sinnvoll und sinnvoll zu kombinieren.

+0

Die Frage ist: Warum sollte ein Programmierer so etwas tun? Können Sie ein realistisches Szenario finden? :) – acejazz

+0

@acejazz: Mein erster Satz deckt das ab: Ich denke nicht, dass es einen praktischen Grund dafür gibt (es sei denn, wie ich später sage, du musst nichts wirklich zu der Liste hinzufügen). –

Verwandte Themen