Ich habe diese generische Funktion:Rückgabetyp der generischen Methode (Java)
public static <T extends Number> T sum(List<T> list){
Number tot = 0;
for(Number n: list){
tot = tot.doubleValue() + n.doubleValue();
}
return (T)tot;
}
Recall vom Haupt mit diesem Code:
public static void main(String[] args) {
ArrayList<Integer> listInt = new ArrayList<>();
listInt.add(3);
listInt.add(5);
listInt.add(6);
listInt.add(8);
System.err.println("Sum: " + Calcolatrice.sum(listInt))
}
ich daher erwarten (wobei listInt eine Arraylist von ganzen Zahlen) dass der von der Funktionssumme zurückgegebene Wert T = Integer ist und in diesem Fall ein Konvertierungsfehler von Double zu Integer gegeben ist. Der Typ des Ergebnisses ist stattdessen Double und kein Fehler wird ausgelöst. Die Besetzung (T) tot hat nicht das gewünschte Ergebnis.
Ich nehme an, es ist, weil Java Generics Standphase behandelt, aber jemand weiß besser erklären, warum es so funktioniert?
[Typ Löschung] (https://docs.oracle.com/javase/tutorial/java/generics/erasure.html) ist der Begriff, der dieses Verhalten erklärt .... –