2011-01-24 19 views
5

Por qué el orden de declaración importante para las enumeraciones de Java, quiero decir ¿por qué este dar (tiempo de compilación) erroresOrden de campos miembros en Enum

public enum ErrorCodes { 
    public int id; 
    Undefined; 
} 

pero éste está bien:

public enum ErrorCodes { 
    Undefined; 
    public int id; 

}. 

Respuesta

5

Porque esta es la sintaxis de las enumeraciones. Podría permitir diferentes órdenes, sin embargo, esto podría haber estado abierto a errores tales como olvidar colocar un tipo en un campo y convertirlo en un valor enum.

EDITAR: La razón por la que digo que podrían estar en cualquier orden es que los campos, métodos, inicializadores y constructores pueden estar en cualquier orden. Creo que la restricción es válida si se trata de reducir los errores. Aunque los campos/constructores/métodos pueden estar en cualquier orden, es muy común verlos en ese orden para poder leerlos.

+2

+1 - Si la orden no estuviera vinculada, las enumeraciones serían más difíciles de leer, la sintaxis sería más difícil de analizar y los mensajes de error de sintaxis serían menos comprensibles. –

6

No es una respuesta muy satisfactoria, pero es solo cómo se definen las enumeraciones en Java. Consulte la sección 8.9 Enums en la Especificación del lenguaje Java.

1

Java Enum es un tipo especial de clase. Su forma simple y útil sobre todo no contiene campos personalizados:

public enum ErrorCodes { 
    Undefined, Defined, Foo, Bar 
} 

magia compilador crea la clase que se ve aproximadamente como la siguiente:

public class ErrorCodes { 
    public final static ErrorCodes Undefined = new ErrorCodes(); 
    public final static ErrorCodes Defined = new ErrorCodes(); 
    public final static ErrorCodes Foo = new ErrorCodes(); 
    public final static ErrorCodes Bar = new ErrorCodes(); 
} 

Esta magia compilador espera que la derecha campos definición después de la cabecera de enumeración.

Sol fuera tan amable que nos permitirá añadir estos campos que siguen a la definición de los miembros eunum: ErrorCodes public enum { Indefinido, Definido, Foo, Bar; private String myField; }

Este es el motivo por el que su código personalizado siempre debe definirse después de los campos enum.

+0

No es "compilador mágico" ... es una "sintaxis" común o de jardín. –

Cuestiones relacionadas