繁体   English   中英

公共嵌套类中的静态最终字段

[英]static final field in public nested class

我有这样的代码:

public class Foo {
    public class Bar implements Parcelable {
        public static final Parcelable.Creator<Type> CREATOR =
                   new Parcelable.Creator<Type>() {
                   @Override
                   ....
        }
    }
}

Eclipse 说:

The field CREATOR cannot be declared static in a non-static inner type, unless 
initialized with a constant expression

请告诉我是什么? 我认为这是因为我有一个嵌套类,但我不知道如何纠正错误。

内部类(非静态嵌套类)不能有任何静态方法。 因为

An inner class is implicitly associated with an instance of its outer class, it cannot define any static methods itself.

对于外部类Foo ,您可以像这样访问静态方法test()

Foo.test();

对于静态内部类Bar ,您可以像这样访问其静态方法innerTest()

Foo.Bar.innerTest();

但是,如果Bar不是static ,则现在没有引用方法innerTest()静态方法。 非静态内部类与其外部类的特定实例相关联。

内部类不能有静态方法......如果你想拥有它,你还需要将 Bar 定义为静态方法。

否则,该字段必须声明为非静态的。

虽然不知道为什么,Java 禁止内部类中的静态字段和方法。 解决此问题的唯一方法是声明静态内部类; 或者当然您可以使嵌套类中的字段为非静态。

暂无
暂无

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

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