Considere el siguiente código:La conversión a una clase interna con los genéricos
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();
}
}
Este código se compila correctamente en Eclipse, pero falla al compilar en 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
Es esto un error en javac
o ¿Eclipse?
Si cambio el elenco de (Outer.Inner)o
compila, aunque hay una advertencia:
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 versión: 1.6.0_21
¿Cuál es la advertencia? –
agregado a la pregunta – dogbane
wow! Yo también probé esto. Eclipse está bien con el 1er código pero javac no tiene +1 por decirme algo nuevo. –