我在使用泛型时发现了一种奇怪的行为。
在此类Foo<T>
中,strings
成员与以下内容没有任何关系T
:
package test;
import java.util.ArrayList;
public class Foo<T> {
ArrayList<String> strings;
T getSome() {
return null;
}
}
该类主要用于:
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
}
}
编译错误是“不兼容的类型。必需:找到的字符串:对象”。
当使用原始类型时,Java 似乎忘记了String
类型参数。ArrayList
Foo
我的 java 版本是 1.7.0_21