2012-06-14 18 views
6

Duplicar posible:
Java: Local Enums¿Por qué Java no permite definir enum dentro de un método?

¿Por qué no podemos definir enumeración dentro de un método específico en java? Si tengo un escenario en el que usaré esos valores enum en un método, no en otro lugar. ¿No sería agradable declarar el método en lugar de definirlo globalmente? me refiero como público o por defecto.

+0

Jon Skeet dijo que [los enum son implícitamente estáticos] (http://stackoverflow.com/a/4827347/348975). – emory

Respuesta

7

No se puede definir en el nivel de método como se indica en el JavaDocs. (Me gustaría ver un lenguaje que lo permitiera)

Los tipos enum anidados son implícitamente estáticos. Está permitido declarar explícitamente que un tipo de enumeración anidado sea estático.

Esto implica que es imposible definir una enumeración local (§14.3), o definir una enumeración en una clase interna (§8.1.3).

Lo que puede hacer que os lo anunciará a nivel de clase y una variable a nivel de método:

public class Light { 
    ... 
    private LightSwitch position; 
    private enum LightSwitch { 
     On, 
     Off 
    } 
    public void SwitchOn() { 
     Switch(LightSwitch.On); 
    } 
    public void SwitchOff() { 
     Switch(LightSwitch.Off); 
    } 
    private void Switch(LightSwitch pos) { 
     position = pos; 
    } 
} 
+0

La pregunta era por qué, el hecho de que no se puede dar por hecho. "Me gustaría ver un lenguaje que lo permita" - C y C++. –

3

de JLS

tipos de enumeración anidados son implícitamente estáticos. Está permitido declarar explícitamente que un tipo de enumeración anidado es estático.

Esto implica que es imposible definir una enumeración local (§14.3) o para definir una enumeración en una clase interna (§8.1.3).

Además, son implícitamente definitivas, en general. Es un patrón general tener enums como parte de la clase ya que generalmente se comportan como una constante.

Un tipo de enumeración es implícitamente final a menos que contenga al menos una constante de enumeración que tenga un cuerpo de clase.

0

No puede definir enumeraciones dentro de los métodos, pero puede definir clases, por lo que si realmente desea diseñar su método de esta manera, puede definir una matriz de su objeto de clase local.

public void doSomething() { 
    class Country { 
     int population = 0; 
     String name = null; 

     public Country(int population, String name) { 
      this.population = population; 
      this.name = name; 
     } 

    } 
    Country[] countries = { new Country(85029304, "Germany"), new Country(61492053, "Spain") }; 
    // do stuff with countries 
} 
Cuestiones relacionadas