Tipo genérico perdido por miembro de tipo crudo
He encontrado un comportamiento extraño al trabajar con genéricos.
En esta claseFoo<T>
, lastrings
miembro no tiene nada que ver conT
:
package test;
import java.util.ArrayList;
public class Foo<T> {
ArrayList<String> strings;
T getSome() {
return null;
}
}
La clase se usa en main:
package test;
public class Main {
public static void main() {
Foo<Integer> intFoo = new Foo<>();
Integer i = intFoo.getSome();
String s1 = intFoo.strings.get(0);
Foo rawFoo = new Foo();
Object o = rawFoo.getSome();
String s2 = rawFoo.strings.get(0); // Compilation error on this line
}
}
El error de compilación es "tipos incompatibles. Requerido: Cadena encontrada: Objeto".
Parece que Java se olvida de laString
escriba argumento paraArrayList
cuando el tipo crudo deFoo
se utiliza
Mi versión de java es 1.7.0_21