Generische Methode - was bringt der Wildcard Operator?

Status
Nicht offen für weitere Antworten.

-frank

Bekanntes Mitglied
ich stehe gerade etwas auf der leitung. hat der ? operator in diesem beispiel irgendwelche vorteile (gegenüber dem anderen beispiel)?

private <T extends A> void printList(List<T> list) {
..
}

private void printList(List<? extends A> list) {
..
}

mir ist klar, dass eine List<? extends Number> zB eine List<Integer> akzeptieren kann, weil durch die Wildcard gekennzeichnet ist, dass man nur lesend auf die liste zugreifen kann und es somit kein Problem gibt (also keine falschen typen in die liste kommen können). selbiges erreiche ich aber auch mit List<T extends Number>. hat der ? operator nur den vorteil, dass man nicht im methoden-kopf einen weiteren generischen Typen hinzufügen muss?
 

doctus

Bekanntes Mitglied
wenn ich mich recht erinnere, sind bei beispiel eins nur Objekte als Parameter zulässig, die exakt vom Typ T sind. Beim zweiten Beispiel sind Objekte der Klasse A möglich, sowie auch deren Unterklassen, was im ersten Beispiel nicht der Fall ist.

Bin mir nicht mehr 100% sicher. wenns falsch ist, lasse ich mich gerne eines besseren belehren.

Lg doctus
 
G

Guest

Gast
-frank hat gesagt.:
ich stehe gerade etwas auf der leitung. hat der ? operator in diesem beispiel irgendwelche vorteile (gegenüber dem anderen beispiel)?

private <T extends A> void printList(List<T> list) {
..
}

private void printList(List<? extends A> list) {
..
}

mir ist klar, dass eine List<? extends Number> zB eine List<Integer> akzeptieren kann, weil durch die Wildcard gekennzeichnet ist, dass man nur lesend auf die liste zugreifen kann und es somit kein Problem gibt (also keine falschen typen in die liste kommen können). selbiges erreiche ich aber auch mit List<T extends Number>. hat der ? operator nur den vorteil, dass man nicht im methoden-kopf einen weiteren generischen Typen hinzufügen muss?

Das ? steht an dieser Stelle grundsätzlich für einen unbekannten bzw. beliebigen Typen. Sprich eine List<?> könnte theoretisch alle möglichen Objekte aufnehmen. Dein Beispiel List<? extends A> schränkt das ganze jetzt so ein, dass die List alle möglichen Objekte aufnehmen können, die von A erben (evtl. reicht auch wenn das betreffende Objekt A implementiert, bin mir da aber nicht sicher).
 

-frank

Bekanntes Mitglied
@gast: ja, es reicht immer auch, wenn ein Interface implementiert ist.

@beide:
ich hab das auch immer so verstanden, wie ihr. und ja, den ? operator kann man so verwenden wie von euch beschrieben. Allerdings: wenn ich wie im anderen Beispiel anstatt des ? einen eigenen generischen Parameter <T extends A> definiere (im Methodenkopf), dann akzeptiert der Compiler genauso alle möglichen Listen, die auch List<? extends A> akzeptiert.
 

-frank

Bekanntes Mitglied
byto hat gesagt.:

warum hab ich das mit google nicht gefunden? das ist genau, was ich gesucht hatte, danke!

auf seite 8/9 wird exakt auf meine frage eingangen:
... this is a sign that we can replace S with a wildcard. Using wildcards is clearer and much more concise than decalring explicit type parameters, and should therefore be preferred whenever possible

ich hatte also anscheinend recht, dass man prinzipiell beide varianten nehmen kann. aber wenn der ? operator ausreicht, muss man eben keinen zusätzlichen generischen Parameter im Methoden Kopf deklarieren und leserlicher ist es aus. --> solange es ausreicht ? verwenden.
 
S

SlaterB

Gast
ein Parameter kann eh nur einen Typ haben,
bei lokalen Variablen ist das ? nützlicher:

List<? extends MeinTyp> l = null;
l = new ArrayList<MeinTyp>();
l = new ArrayList<MeinUnterTyp>();

da ginge
List<T extends MeinTyp> l = null;
auch gar nicht, da T nicht festgesetzt werden kann wie bei Operationen
 

-frank

Bekanntes Mitglied
SlaterB hat gesagt.:
da ginge
List<T extends MeinTyp> l = null;
auch gar nicht, da T nicht festgesetzt werden kann wie bei Operationen

wobei man es schon wieder umgehen kann:

Code:
void <T extends MeinTyp> foo() {
    List<T> l = ..
}

aber das macht in der regel wohl wenig sinn und würde jemanden, der sich die methodensignatur ansieht, nur verwirren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
H Statische generische Methode Java Basics - Anfänger-Themen 2
D generische methode <T> void . Java Basics - Anfänger-Themen 9
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60

Ähnliche Java Themen

Neue Themen


Oben