/ / Was ist der Unterschied zwischen Platzhaltern mit oberen Schranken und gebundenen Typparametern? - Java, Generika, Platzhalter

Was ist der Unterschied zwischen Wildcards mit oberen Schranken und gebundenen Typparametern? - Java, Generika, Platzhalter

Beide nutzen als Restriktionsmechanismen und JavaDas Dokument sagt, dass der Platzhalter mit Obergrenze alle Unterklassen als Variablen zulässt, während gebundene Parameter nur deklarierte Klassenreferenzvariablen akzeptieren.

Meine Frage ist. Zum Beispiel, wenn wir nehmen Number super class und deklariert sie als gebundene Typparameter. In der Regel werden alle Unterklassenvariablen im praktischen Szenario unabhängig vom Unterklassentyp akzeptiert. Warum also die Joker?

Antworten:

2 für die Antwort № 1

Wie in der Dokumentation The term List<Number> is more restrictive than List<? extends Number> because the former matches a list of type Number only, whereas the latter matches a list of type Number or any of its subclasses.

upperBounded

Betrachten Sie dieses Beispiel

import java.util.Arrays;
import java.util.List;


public class Sample {

public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static void main(String[] args) {
List<Double> ld = Arrays.asList(1.2, 2.3, 3.5);
System.out.println("sum = " + sumOfList(ld));
}

}

Oben funktioniert wie erwartet, wenn Sie diese Zeile jedoch ändern public static double sumOfList(List<Number> list) {

dann wird sich diese Zeile beschweren

System.out.println("sum = " + sumOfList(ld)); das ändern Sie es in Number, d. h. List<Number> ld oder ändern

oder ändern Sie das Untermenü in public static double sumOfList(List<Double> list) {