Acabo de recibir el proyecto Java5 que tiene este error, traté de usar Java5 y Java6, pero todavía está allí. funcionó de alguna manera antes (ya que estaba en svn), ¿cómo puedo evitar el error del compilador?¿No puede hacer referencia al campo enum estático dentro de un inicializador?
Respuesta
No "pase por alto" el error, no hará lo que usted desea. El error está ahí por una buena razón.
Los valores enum se inicializan antes que cualquier otro campo estático. Si quieres hacer algo como la adición de todos los valores en un mapa, hacerlo en un inicializador estático después todo lo demás:
import java.util.*;
public enum Foo
{
BAR, BAZ;
private static final Map<String, Foo> lowerCaseMap;
static
{
lowerCaseMap = new HashMap<String, Foo>();
for (Foo foo : EnumSet.allOf(Foo.class))
{
// Yes, use some appropriate locale in production code :)
lowerCaseMap.put(foo.name().toLowerCase(), foo);
}
}
}
Jon - ¿sabes por qué este error no ocurre en Eclipse 3.3 pero lo hace en 3.4? – tddmonkey
¿Hay alguna razón en el ejemplo anterior para usar 'Foo foo: EnumSet.allOf (Foo.class)' en lugar de 'Foo foo: Foo.values ()'? –
@AbdullahJibaly: No realmente. Ellos son bastante equivalentes aquí, creo. –
Otra forma de "by-pass" que, si es necesario, por ejemplo, un contador o algo que debe ejecutarse en cada initalization, es crear una clase interna estática privada, así:
- 1. ¿Un inicializador de campo no puede hacer referencia al campo, método o propiedad no estático?
- 2. razón conceptual de la 'A inicializador de campo no puede hacer referencia al campo no estático, método o propiedad' Error
- 3. no se puede hacer una referencia estática al campo no estático
- 4. ¿Qué significa "un inicializador de campo no puede hacer referencia a campos no estáticos" significa en C#?
- 5. No se puede hacer una referencia estática al miembro de campo no estático Variable con la variable privada
- 6. ¿Por qué este código enum es una referencia ilegal a un campo estático?
- 7. en un inicializador estático
- 8. Lazy <T> Error de carga diferida: un inicializador de campo no puede hacer referencia al campo, método o propiedad no estáticos
- 9. No se puede hacer una referencia estática al método no estático (Android getApplicationContext())
- 10. ¿Cómo hacer un bloque de inicializador (estático) strictfp?
- 11. No se puede acceder campo no estático
- 12. ¿Cómo puedo hacer referencia al valor de un campo estático final en la clase?
- 13. nombre de la variable no estática no se puede hacer referencia a un contexto estático
- 14. Cargar propiedades Java dentro del bloque de inicializador estático
- 15. ¿Por qué un delegado no puede hacer referencia a un método no estático cuando se usa en un método estático?
- 16. Clase anidada: no se puede acceder al campo no estático en el contexto estático
- 17. ¿Cómo agregar campo final estático con inicializador usando ASM?
- 18. "No se puede hacer una referencia estática a un método no estático" en Android
- 19. Java enumeración- No se puede hacer referencia a un campo antes de que se defina
- 20. "variable no estática, esto no se puede hacer referencia desde un contexto estático"?
- 21. variable no estática no se puede hacer referencia a un contexto estático
- 22. java: no se puede hacer referencia a la variable no estática desde un contexto estático Error
- 23. Enum excediendo el límite de 65535 bytes del inicializador estático ... ¿qué es lo mejor?
- 24. ¿Hay un constructor estático o un inicializador estático en Python?
- 25. Invocar inicializador estático de nuevo
- 26. Cómo manejar un inicializador de campo final estático que arroja una excepción comprobada
- 27. Referencia no definida a un miembro estático
- 28. Genéricos de Java: no se puede hacer referencia a la variable de tipo T no estática desde un contexto estático
- 29. ¿Cómo puede ser nulo un campo estático de solo lectura?
- 30. Enum dentro de un JSP
podría ayudar a publicar su código que se erroring – tddmonkey
podría dar un pequeño ejemplo de código de lo que estamos tratando ¿conseguir? –
Perdón por esto, lo encontré a través de Google, pero parece funcionar cuando el campo final estático privado es de tipo primitivo. ¿Alguien tiene una idea de por qué? – Norswap