Warum ist nur ein Classcast ausgelöst, wenn der Rückgabewert zugegriffen wird?
-
13-09-2019 - |
Lösung
Generics in Java 6.5 sind Typ gelöscht , was bedeutet, dass jeder generischer Typ (oder was auch immer der kleinste gemeinsame Nenner Typ ist, der in diesem Fall ist Object
) zur Laufzeit im Grunde nur ein CharSequence
Typ ist. Die entsprechenden Abgüsse sind überall dort, wo erforderlich, eingefügt. So Ihre Methode wird typ gelöscht etwas, das wie folgt aussieht:
public static CharSequence foo(CharSequence s) {
return (CharSequence) new StringBuilder(s);
}
Und Ihr Anruf wird typ gelöscht folgt aus:
System.out.println((String)foo("hello"));
Offenbar Java wird nicht die Mühe Einsetzen der (String)
gegossen, wenn der Rückgabewert nie benutzt, warum ist die Mühe machen?
Andere Tipps
Allg Typen sind nur für den Compiler zur Verfügung, und erasured werden zur Laufzeit (grundsätzlich weggelassen). So ist die Besetzung innerhalb der Methode ignoriert
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow