Generics in Java 6.5 sind type-erased, was bedeutet, dass jeder generischer Typ ist im Grunde nur ein Object
Typ (oder was auch immer der kleinste gemeinsame Nenner Typ ist, der in diesem Fall ist CharSequence
) zur Laufzeit. Die passenden Modelle werden überall dort eingefügt, wo sie benötigt werden. So wird Ihre Methode, um etwas typ gelöscht, die wie folgt aussieht:
public static CharSequence foo(CharSequence s) {
return (CharSequence) new StringBuilder(s);
}
und Ihr Anruf wird typ gelöscht dies:
System.out.println((String)foo("hello"));
Offenbar Java wird nicht die Mühe Einsetzen des (String)
gegossen, wenn die Rückgabewert wird nie verwendet - warum?
Hat Ihr Compiler Sie nicht gewarnt? –
Es warnte in der Methode, aber nicht auf beiden Aufruf - war neugierig darüber, warum ein Aufruf funktionierte und der andere warf die Ausnahme. – Brabster