为什么不是泛型类型,泛型类中的静态变量?
示例,
public class MyType<E> {
class Inner { }
static class Nested { }
public static void main(String[] args) {
MyType mt; // warning: MyType is a raw type
MyType.Inner inn; // warning: MyType.Inner is a raw type
MyType.Nested nest; // no warning: not parameterized type
MyType<Object> mt1; // no warning: type parameter given
MyType<?> mt2; // no warning: type parameter given (wildcard OK!)
}
}
MyType
是通用类,Nested
是static
类。
调用MyType.Inner
,而不是警告泛型类型。
我想知道为什么static
变量不警告原始类型?
答案 0 :(得分:4)
“在以下任何地方引用泛型类C的类型参数是编译时错误:
8.5.1指的是静态嵌套类。
(JLS§8.1.2)(http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.2
因此,静态嵌套类不会,也不能从外部类中获得与之关联的任何通用信息,因此没有关于它的缺席的警告。
答案 1 :(得分:2)
因为静态嵌套类Nested
未与MyType
的任何特定实例相关联。泛型类型(仅在编译时)应用于您创建MyType
的实例,并且由于Inner
与此类实例相关联,因此它可以引用泛型参数E
,但是Nested
没有这种联系。
答案 2 :(得分:0)
由于类型擦除,Java泛型只能应用于对类实例的引用。
因此,在嵌套静态类中根本不会继承泛型参数。