Wildcards sind nur dann wirklich in Methodenparameter Erklärungen nützlich, da sie den Bereich der akzeptablen Parametertypen erhöhen, zum Beispiel:
void original(List<Number> list) { /* ... */ }
void withUpperWildcard(List<? extends Number> list) { /* ... */ }
void withLowerWildcard(List<? super Number> list) { /* ... */ }
original(new ArrayList<Number>()); // OK.
original(new ArrayList<Integer>()); // Compiler-error.
original(new ArrayList<Object>()); // Compiler-error.
withUpperWildcard(new ArrayList<Number>()); // OK.
withUpperWildcard(new ArrayList<Integer>()); // OK.
withLowerWildcard(new ArrayList<Number>()); // OK.
withLowerWildcard(new ArrayList<Object>()); // OK.
Wildcards im Gegenzug Arten das Leben schwer machen (oder, besser gesagt, chaotisch) für Benutzer Ihrer Klasse, da müssen Sie also entweder sie verbreiten oder explizite Arbeit zu tun, um sie verschwinden zu lassen, zum Beispiel:
List<? extends Number> method() { /* ... */ }
// Compiler error.
List<Number> list1 = method();
// OK, but yuk!
List<? extends Number> list2 = method();
// OK, but the list gets copied.
List<Number> list3 = new ArrayList<Number>(method());
Wildcards in Ihrem lokalen Variablen sind einfach nicht notwendig (außer die Ergebnisse der Wildcard zu akzeptieren -returning Methoden).
Zitat Effective Java 2nd Ed:
Wenn der Benutzer einer Klasse über Wildcard-Typen zu denken hat, gibt es wahrscheinlich mit der Klasse des API etwas nicht stimmt.
Eng verwandt: http://stackoverflow.com/questions/18176594/when-to-use-generic-methods-and-when-to-use-wild-card und http://stackoverflow.com/ Fragen/2922811/whats-the-purpose-behind-wildcards-und-wie-sind-sie-anders-von-Generika – Tunaki
Platzhalter sind nur in Methodenparameterdeklarationen wirklich nützlich, da sie den Bereich akzeptabler Parametertypen vergrößern. Platzhalter in Rückgabetypen erschweren den Benutzern Ihrer Klasse das Leben (oder eher unordentlich); Wildcards in Ihren lokalen Variablen sind nicht notwendig (außer um die Ergebnisse von Wildcard-Rückgabe-Methoden zu akzeptieren). Um zu zitieren * Effektive Java 2nd Ed *, "Wenn der Benutzer einer Klasse über Wildcard-Typen denken muss, gibt es wahrscheinlich etwas falsch mit der API der Klasse." –