Obere und untere Schranken verstehen? in Java Generics
Es fällt mir wirklich schwer, den Platzhalterparameter zu verstehen. Ich habe ein paar Fragen dazu.
?
als Typparameter kann nur in Methoden verwendet werden. z.B:printAll(MyList<? extends Serializable>)
Ich kann keine Klassen mit definieren?
als Typparameter.
Ich verstehe die Obergrenze an?
. printAll(MyList<? extends Serializable>)
meint: "printAll
wird gedrucktMyList
wenn es Objekte hat, die das implementierenSerialzable
Schnittstelle."
Ich habe ein kleines Problem mit demsuper
. printAll(MyList<? super MyClass>)
meint: "printAll
wird gedrucktMyList
wenn es Gegenstände vonMyClass
oder jede Klasse, die sich erstrecktMyClass
(die Nachkommen vonMyClass
)."
Korrigiere mich, wo ich falsch gelaufen bin.
Kurz gesagt, nurT
oderE
oderK
oderV
oderN
kann als Typparameter zum Definieren generischer Klassen verwendet werden.?
kann nur in Methoden verwendet werden
public void printAll(MyList<? super MyClass>){
// code code code
}
Übereinstimmung mit Ivor Hortons Buch,MyList<? super MyClass>
bedeutet, dass ich drucken kannMyList
wenn es Gegenstände vonMyClass
oder eine der von ihr implementierten Schnittstellen oder Klassen. Das ist,MyClass
ist einUntergrenze. Es ist die letzte Klasse in der Vererbungshierarchie. Dies bedeutet, dass meine ursprüngliche Annahme falsch war.
Also, sag obMyClass
sieht aus wie:
public class MyClass extends Thread implements ActionListener{
// whatever
}
dann,printAll()
druckt wenn
1. Es gibt Objekte vonMyClass
In der Liste
2. Es gibt Objekte vonThread
oderActionListener
in demList
Nachdem ich die vielen Antworten auf die Frage gelesen habe, habe ich folgendes Verständnis:
? extends T
meintjede Klasse, die sich erstrecktT
. Wir beziehen uns also auf dieKinder vonT
. Daher,T
ist die Obergrenze. Die oberste Klasse in der Vererbungshierarchie
? super T
meintjede Klasse / Schnittstelle, die istsuper
vonT
. Damit meinen wir alleEltern vonT
. T
ist also die Untergrenze. Die unterste Klasse in der Vererbungshierarchie