Подтвердить что ты не робот

Статическое конечное поле в общедоступном классе

У меня такой код:

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

Скажите, пожалуйста, что это? Я думаю, что это потому, что у меня есть вложенный класс, но не знаю, как исправить ошибку.

4b9b3361

Ответ 1

Внутренний класс (нестатический вложенный класс) не может иметь статических методов. потому что

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(). Нестатические внутренние классы привязаны к определенному экземпляру их внешнего класса.

Ответ 2

Внутренний класс не может иметь статические методы... Если вы хотите его использовать, вам также нужно определить Bar как статический.

В противном случае поле должно быть объявлено как нестатическое.

Ответ 3

Хотя я не знаю, почему статические поля и методы во внутренних классах запрещены Java. Единственный способ обойти это, чтобы объявить статический внутренний класс; или, конечно, вы можете сделать свое поле во вложенном классе нестатическим.