367 votes

Java : utilisation de l'instruction switch avec un enum sous une sous-classe

Tout d'abord, je tiens à préciser que je suis beaucoup plus familier avec les enums en C# et qu'il semble que les enums en Java soient un véritable fouillis.

Comme vous pouvez le constater, j'essaie d'utiliser une instruction switch @ enums dans mon prochain exemple, mais j'obtiens toujours une erreur, quoi que je fasse.

L'erreur que je reçois est la suivante :

L'étiquette du cas qualifié SomeClass.AnotherClass.MyEnum.VALUE_A doit être remplacée par la constante d'énumération non qualifiée VALUE_A

Le fait est que je bastante Je comprends l'erreur mais je ne peux pas simplement écrire la VALUE_A puisque l'enum est située dans une autre sous-classe. Existe-t-il un moyen de résoudre ce problème ? Et pourquoi cela se produit-il en Java ?

//Main Class
public class SomeClass {

    //Sub-Class
    public static class AnotherClass {
        public enum MyEnum {
            VALUE_A, VALUE_B
        }    
        public MyEnum myEnum;
    }

    public void someMethod() { 
        MyEnum enumExample //...

        switch (enumExample) {
            case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
                //..
                break;
            }
        }
    }
}

2voto

Jimit Patel Points 38

Voici comment je l'utilise. Et cela fonctionne à merveille.

public enum Button {
        REPORT_ISSUES(0),
        CANCEL_ORDER(1),
        RETURN_ORDER(2);

        private int value;

        Button(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

Et le switch-case comme indiqué ci-dessous

@Override
public void onClick(MyOrderDetailDelgate.Button button, int position) {
    switch (button) {
        case REPORT_ISSUES: {
            break;
        }
        case CANCEL_ORDER: {
            break;
        }
        case RETURN_ORDER: {
            break;
        }
    }
}

0voto

dash1e Points 4321

Écrire à someMethod() de cette façon :

public void someMethod() {

    SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A;

    switch (enumExample) {
    case VALUE_A:
        break;
    }

}

Dans la déclaration de commutation, vous devez utiliser uniquement le nom de la constante.

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