Las constantes enum deben ser los primeros elementos en la enumeración. Una versión de su código que compila:
class Foo {
public enum MyEnum {
MyEnumType, MyEnumType2;
public String bar() {
return MY_STRING;
}
public String bar2() {
return MY_STRING + "2";
}
private static final String MY_STRING = "a string I reuse in the enum";
}
}
* * EDITAR
ediciones hechas con sede fuera a su pregunta original, veo lo que está tratando de hacer. No, no es posible usar constantes en las declaraciones literales enum que se declaran en la definición enum. Esto se debe a que las declaraciones literales DEBEN ser los primeros elementos en la enumeración. Esto es obligatorio por la Especificación del lenguaje Java. Dos cosas rápidas:
- Está utilizando
private static final Strings
. Esto le da absolutamente ningún beneficio sobre el uso de literales de cadena en su lugar, que resolvería el problema.
- Si desea declarar constantes reutilizables (
public static final Strings
), deberá hacerlo fuera de de la enumeración.
Alternativamente, usted puede declarar las enumeraciones como elementos anidados de una clase que define el private static final String
's para usted.
Algunos pseudocódigo:
public class Foo {
public static enum MyEnum {
MyEnumType(0, MY_STRING), MyEnumType2(1, "Hello");
private int ordinal;
private String value;
MyEnum(int ordinal, String value) {
this.ordinal = ordinal;
this.value = value;
}
public int getOrdinal() {
return ordinal;
}
public String getValue() {
return value;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
public void setValue(String value) {
this.value = value;
}
}
private static final String MY_STRING = "a string I reuse in the enum";
}
La convención dice que ponga sus campos sobre sus métodos. –
En realidad estoy usando las cadenas en el constructor. – will
Tom - ¿Qué quiere decir con "poner sus campos sobre sus métodos"? – will