2009-11-04 5 views
62

tengo una clase que define su propia enumeración de esta manera:¿Cómo se puede hacer referencia a mi me Java Enum sin especificar su tipo

public class Test 
{ 
    enum MyEnum{E1, E2}; 

    public static void aTestMethod() { 
     Test2(E1); // << Gives "E1 cannot be resolved" in eclipse. 
    } 
    public Test2(MyEnum e) {} 
} 

Si especifico MyEnum.E1 que trabaja muy bien, pero me gustaría mucho al igual tenerlo como "E1". ¿Alguna idea de cómo puedo lograr esto, o tiene que definirse en otro archivo para que esto funcione?

CONCLUSIÓN: No he podido obtener la sintaxis correcta para la importación. Dado que varias respuestas sugirieron que esto era posible, voy a seleccionar el que me proporcionó la sintaxis que necesitaba y superé a los demás. Por cierto, una parte REALMENTE EXTRAÑA de esto (antes de que obtuviera la importación estática para trabajar), una declaración de cambio que había escrito que utilizaba la enumeración no permitía que la enumeración fuera prefijada por su tipo, todo el resto del código lo requería. Lastima mi cabeza

+6

Con respecto al comportamiento "realmente extraño" en las sentencias switch: Java hace esto en todas las enumeraciones en una instrucción switch. Como sabe qué tipo está activando, piensan que no hay motivo para que vuelva a especificar el tipo en cada bloque de casos. http://download.oracle.com/javase/tutorial/java/javaOO/enum.html – StriplingWarrior

+1

Supongo que lo que me llegó es que no permitiría el prefijo de tipo Enum. En cualquier otro lugar, se requiere el prefijo (si no se importa) u opcional. –

+0

Estoy de acuerdo con usted en referencia a la incoherencia 'switch', hace que los programadores Java menos experimentados se rasquen la cabeza. – jmarkmurphy

Respuesta

100

En realidad, puede hacer un static import de una enumeración enum. El siguiente código compila bien:

package mypackage; 

import static mypackage.Test.MyEnum.*; 

public class Test 
{ 
    enum MyEnum{E1, E2}; 

    public static void aTestMethod() { 
     Test2(E1); 
    } 

    public static void Test2(MyEnum e) {} 
} 
+1

Aludí a esto como una solución en mi pregunta, pero realmente preferiría no hacer eso. Las enumeraciones solo se usan dentro de este archivo. Parece extraño que esto no funcione automáticamente. –

+0

Aunque debe usar una importación estática, no necesita definirla en su propia clase. – Yishai

+0

Lo intenté de varias maneras y no puedo conseguir que la importación estática se resuelva correctamente cuando se refiere a una clase dentro de la clase que realiza la importación. –

13

Usted puede hacer una importación estática en una clase anidada:

clase
import static apackage.Test.Enum.*; 
4

La prueba tiene que ser definido en un paquete para ser importables.

con el paquete definido en Test (FUNCIONA):

package mypackage; 

que puede utilizar:

import static mypackage.Test.MyEnum.*; 

Sin paquete definido, no se puede utilizar (NO FUNCIONA):

import static Test.MyEnum.*; 
Cuestiones relacionadas