Typ ogólny utracony dla elementu typu raw
Znalazłem dziwne zachowanie podczas pracy z generykami.
W tej klasieFoo<T>
, thestrings
członek nie ma z tym nic wspólnegoT
:
package test;
import java.util.ArrayList;
public class Foo<T> {
ArrayList<String> strings;
T getSome() {
return null;
}
}
Klasa jest używana w 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
}
}
Błąd kompilacji to „typy niezgodne. Wymagane: Znaleziono ciąg: Obiekt”.
Wygląda na to, że Java zapominaString
wpisz argument doArrayList
kiedy surowy typFoo
jest używany.
Moja wersja java to 1.7.0_21