Java 公共嵌套类中的静态final字段

Java 公共嵌套类中的静态final字段,java,eclipse,Java,Eclipse,我有这样的代码: public class Foo { public class Bar implements Parcelable { public static final Parcelable.Creator<Type> CREATOR = new Parcelable.Creator<Type>() { @Override ..

我有这样的代码:

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

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

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


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

尽管我不知道为什么,Java禁止内部类中的静态字段和方法。解决这个问题的唯一方法是声明一个静态的内部类;当然,也可以将嵌套类中的字段设置为非静态。

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

内部类与其外部类的实例隐式关联,它本身不能定义任何静态方法。

对于外部类
Foo
,您可以访问静态方法
test()
,如下所示:

Foo.test();
Foo.Bar.innerTest();
对于静态内部类
Bar
,可以访问其静态方法
innerTest()
,如下所示:

Foo.test();
Foo.Bar.innerTest();

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

我认为将Bar定义为静态不会允许在其中包含静态变量。但是,如果Bar不是静态的,那么现在就没有静态的方法来引用innerTest()方法了。但是为什么我们需要静态的方法来引用这个方法呢?我们可以像
newfoo().Bar.innerTest()
那样引用它。为什么不呢?