Si consideri il seguente codice:Casting per una classe interna con i generici
public class Outer<T> {
public class Inner{
}
public static <T> Outer<T>.Inner get(){
Object o = new Object();
return (Outer<T>.Inner)o;
}
public static void main(String[] args) throws Exception {
Outer.<String>get();
}
}
Questo codice viene compilato con successo in Eclipse, ma non riesce a compilare in javac
:
Outer.java:10: ')' expected
return (Outer<T>.Inner)o;
^
Outer.java:10: ';' expected
return (Outer<T>.Inner)o;
^
Outer.java:10: illegal start of expression
return (Outer<T>.Inner)o;
^
3 errors
È questo un bug in javac
o Eclisse?
Se cambio il cast per (Outer.Inner)o
si compila, anche se c'è un avvertimento:
Eclipse:
Outer.Inner is a raw type. References to generic type Outer<T>.Inner should be parameterized
javac:
Outer.java:10: warning: [unchecked] unchecked conversion
found : Outer.Inner
required: Outer<T>.Inner
return (Outer.Inner)o;
^
1 warning
Javac versione: 1.6.0_21
Qual è l'avviso? –
aggiunto alla domanda – dogbane
Eeeek !!! anch'io ho provato questo Eclipse va bene con il 1 ° codice, ma javac non è +1 per dirmi qualcosa di nuovo. –