我有这样的代码:
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
请告诉我它是什么?我认为这是因为我有嵌套类,但不知道如何纠正错误。
答案 0 :(得分:25)
内部类(非静态嵌套类)不能有任何静态方法。因为
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()
。非静态内部类与其外部类的特定实例相关联。
答案 1 :(得分:1)
内部类不能有静态方法...如果你想拥有它,你需要将Bar定义为静态。
否则,必须将该字段声明为非静态字段。
答案 2 :(得分:1)
虽然我不知道为什么,Java禁止内部类中的静态字段和方法。解决这个问题的唯一方法是声明一个静态的内部类;或者你当然可以使嵌套类中的字段非静态。