Überlegen Sie sich diesen Code:
public List meth(List type)
{
System.out.println(type); // 1
return new ArrayList(); // 2
}
Es kompiliert nicht in Zeile 2 und sagt, dass eine List benötigt wird.
Jetzt, wenn es geändert wird zu:
public List meth(List type)
{
System.out.println(type); // 1
return new ArrayList(); // 2
}
Es kompiliert. Warum? Ich dachte, der Unterschied zwischen der Deklaration eines generischen Typs mit T und der Verwendung des Wildcards sei, dass man bei Verwendung des Wildcards keine neuen Elemente zu einer Sammlung hinzufügen kann. Warum würde die Rückgabe eines Subtyps von List erlauben? Ich vermisse hier etwas, was ist die explizite Regel und wie wird sie angewendet?