Tengo una enumeración como la siguiente, pero eclipse dice que hay errores en la primera definición de cada par opuesto.Java enumeración- No se puede hacer referencia a un campo antes de que se defina
public enum Baz{
yin(yang), //Cannot reference a field before it is defined
yang(yin),
good(evil), //Cannot reference a field before it is defined
evil(good);
public final Baz opposite;
Baz(Baz opposite){
this.opposite = opposite;
}
}
Lo que quiero lograr es ser capaz de utilizar Baz.something.opposite
para obtener el objeto opuesta de Baz.something
. ¿Hay una posible solución para esto? ¿Tal vez un marcador de posición vacío para yang
y bad
antes de yin
y good
se definen en este ejemplo?
+1 Tienes razón, no se puede conseguir que funcione utilizando los objetos reales porque 'evil' ganó' t se definirá hasta que 'good' ya esté inicializado, pero cambiarlos no funciona porque entonces 'good' no se define cuando 'evil' se inicializa. Buena idea para usar los nombres :) – Brian
Reemplazar los valores enum escritos con cadenas sin tipo no es una buena solución. El objetivo de las enumeraciones es proporcionar seguridad de tipo a las constantes, y las cadenas no te dan eso. Además, hay soluciones mucho mejores: hacer esto en un bloque de inicializador estático, como señala @meriton en su respuesta. –