78 votes

Comment référencer mon Java Enum sans spécifier son type

J'ai une classe qui définit ses propres enum comme ceci:

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 je précise MyEnum.E1, il fonctionne très bien, mais j'aimerais vraiment juste pour l'avoir comme "E1". Une idée de comment je peux faire ceci, ou cela doit-il être défini dans un autre fichier pour que cela fonctionne?

CONCLUSION: Je n'avais pas été en mesure d'obtenir la syntaxe pour l'importation correcte. Depuis plusieurs réponses suggérées cela était possible, je vais sélectionner celui qui m'a donné la syntaxe j'ai besoin et upvote les autres.

Par ailleurs, une ÉTRANGE partie de cette (avant j'ai eu la statique importation), une instruction switch que j'ai écrit qui a utilisé l'enum ne pas autoriser l'énumération être préfixé par son type--tout le reste du code. Mal ma tête.

128voto

Pascal Thivent Points 295221

En fait, vous pouvez effectuer une importation statique d’une énumération imbriquée. Le code ci-dessous compile 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) {}
}
 

15voto

Yishai Points 42417

Vous pouvez effectuer une importation statique sur une classe imbriquée:

 import static apackage.Test.Enum.*;
 

4voto

Jayen Points 643

Vous savez que Test doit figurer dans un package pour pouvoir être importé, n'est-ce pas? Vous ne pouvez pas faire import static Test.MyEnum.*; Vous devez faire import static package.Test.MyEnum.*;

1voto

Phil Ross Points 10227

Si vous voulez juste pouvoir faire référence à E1 dans votre classe, vous pouvez définir une variable constante appelée E1 dans votre classe:

 enum MyEnum{E1, E2};

private static final MyEnum E1 = MyEnum.E1;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X