18

私はそのようなコードを持っています:

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

何ですか?ネストされたクラスがあるためだと思いますが、間違いを修正する方法がわかりません。

4

3 に答える 3

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()。非静的内部クラスは、外部クラスの特定のインスタンスに関連付けられています。

于 2012-08-24T08:59:59.917 に答える
1

内部クラスは静的メソッドを持つことはできません...それが必要な場合は、Bar も静的として定義する必要があります。

それ以外の場合、フィールドは非静的として宣言する必要があります。

于 2012-08-24T08:53:56.670 に答える
1

理由はわかりませんが、内部クラスの static フィールドとメソッドは Java で禁止されています。これを回避する唯一の方法は、静的内部クラスを宣言することです。もちろん、ネストされたクラスのフィールドを非静的にすることもできます。

于 2012-08-24T08:55:09.003 に答える