繁体   English   中英

为什么不是普通类中的原始类型,静态变量?

[英]Why not raw type, static variable in generic class?

为什么不是普通类中的原始类型,静态变量?

例,

  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是泛型类, Nestedstatic类。

名为MyType.Inner ,不是警告泛型类型。

我想知道为什么static变量不是警告原始类型?

“在以下任何地方引用泛型类C的类型参数是编译时错误:

  • 声明静态成员C(§8.3.1.1,§8.4.3.2,§8.5.1)“。

8.5.1引用静态嵌套类。

(JLS§8.1.2]( http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.2

因此,静态嵌套类不会也不能从外部类中获取与之关联的任何通用信息,因此不会对其缺失发出警告。

因为静态嵌套类Nested不与MyType任何特定实例相关联。 泛型类型(仅在编译时)应用于您创建MyType的实例,并且由于Inner与此类实例相关联,因此它可以引用泛型参数E ,但Nested没有此类连接。

由于类型擦除,Java泛型只能应用于对类实例的引用。

因此,嵌套静态类中根本不会继承泛型参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM