/ / статичне остаточне поле у ​​відкритому вкладеному класі - java, eclipse

статичне кінцеве поле в загальнодоступному вкладеному класі - java, eclipse

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

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

Затемнення говорить:

The field CREATOR cannot be declared static in a non-static inner type, unless
initialized with a constant expression

Скажіть, будь ласка, що це? Я думаю, це тому, що я вклав клас, але не знаю, як виправити помилку.

Відповіді:

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


1 для відповіді № 2

Внутрішній клас не може мати статичних методів ... Якщо ви хочете його мати, вам потрібно визначити і Бар як статичний.

В іншому випадку поле повинно бути оголошено нестатичним.


1 для відповіді № 3

Хоча я не знаю чому, статичні поля іметоди у внутрішніх класах Java заборонені. Єдиний спосіб обійти це, щоб оголосити статичний внутрішній клас; або, звичайно, ви можете зробити поле вкладеного класу нестатичним.