studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java static compiler-errors

java - reales - libro de android studio en español pdf



variable no estática, esto no se puede referenciar desde un contexto estático, ¿por qué aquí? (2)

Echemos un vistazo a este ejemplo:

public class MainClass { public class NonStaticClass { public static NonStaticClass nonStatic = new NonStaticClass(); //Compile error: The field nonStatic cannot be declared static; //static fields can only be declared in static or top level types public static int i = 10;//this field also causes the same compile error } }

El problema es que NonStaticClass es, bueno, no estático . Una clase interna no estática no puede contener campos estáticos.

Si desea tener un campo estático en la clase interna, debe hacer que la clase sea estática.

De la documentación de java:

Clases internas

Al igual que con los métodos y variables de instancia, una clase interna está asociada con una instancia de su clase adjunta y tiene acceso directo a los métodos y campos de ese objeto. Además, como una clase interna está asociada a una instancia, no puede definir ningún miembro estático .

Para más información, eche un vistazo a las clases anidadas

Tengo un código:

package why; public class Foo { public class Foo1 { String bar; public Foo1(String bar) { this.bar = bar; } public static Foo1 MYCONSTANT = new Foo(null); } }

¿Por qué obtengo ''variable no estática, esto no puede ser referenciado desde un contexto estático''? Asigno la instancia de clase no estática.

¿Por qué incluso aquí?

public static Foo getMYCONSTANT() { return new Foo(null, null); }

Gracias


No estoy seguro de cuál es su verdadera pregunta ... pero quizás esto podría ayudar:

http://en.wikipedia.org/wiki/Singleton_pattern

En la segunda edición de su libro "Effective Java", Joshua Bloch afirma que "un tipo de enumeración de elemento único es la mejor manera de implementar un singleton" [9] para cualquier Java que admita enumeraciones. El uso de una enumeración es muy fácil de implementar y no tiene inconvenientes con respecto a los objetos serializables, que tienen que sortearse de las otras formas.

public enum Singleton { INSTANCE; }