/ / campo final estático na classe aninhada pública - java, eclipse

campo final estático em classe aninhada pública - java, eclipse

Eu tenho esse código:

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

Eclipse diz:

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

Por favor me diga o que é isso? Eu acho que é porque eu aninhei classe, mas não sei como corrigir o erro.

Respostas:

25 para resposta № 1

Uma classe interna (classe aninhada não estática) não pode ter nenhum método estático. Porque

An inner class is implicitly associated with an instance of its outer class, it cannot define any static methods itself.

Para uma classe externa Foo, você pode acessar um método estático test() como isso:

Foo.test();

Para uma classe interna estática Bar , você pode acessar seu método estático innerTest() como isso:

Foo.Bar.innerTest();

No entanto, se Bar não é static, agora não há maneira estática de referenciar o método innerTest(). Classes internas não estáticas estão vinculadas a uma instância específica de sua classe externa.


1 para resposta № 2

A classe interna não pode ter métodos estáticos ... Se você quiser, também precisará definir Bar como estático.

Caso contrário, o campo deve ser declarado como não estático.


1 para resposta № 3

Embora eu não saiba por que, campos estáticos emétodos em classes internas são proibidos por Java. A única maneira de contornar isso para declarar uma classe interna estática; ou, é claro, você pode tornar seu campo na classe aninhada não estática.