Статическое конечное поле в общедоступном классе
У меня такой код:
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
Скажите, пожалуйста, что это? Я думаю, что это потому, что у меня есть вложенный класс, но не знаю, как исправить ошибку.
Ответы
Ответ 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. Единственный способ обойти это, чтобы объявить статический внутренний класс; или, конечно, вы можете сделать свое поле во вложенном классе нестатическим.