Najpierw stwierdzę, że jestem dużo bardziej zaznajomiony z wyliczeniami w C# i wydaje się, że wyliczenia w Java są dość nieładne.Java: używanie instrukcji switch z enum pod podklasą
Jak widać, próbuję użyć instrukcji switch @ enums w moim następnym przykładzie, ale zawsze otrzymuję błąd bez względu na to, co robię.
Błąd zgłaszany jest:
Wykwalifikowana przypadek etykieta
SomeClass.AnotherClass.MyEnum.VALUE_A
muszą zostać zastąpione przez niewykwalifikowanego wyliczenia stałejVALUE_A
Chodzi o to, że dość zrozumieć błąd, ale ja nie można po prostu napisać VALUE_A, ponieważ wyliczenie znajduje się w innej podklasie. Czy istnieje sposób na rozwiązanie tego problemu? I dlaczego dzieje się to w Javie?
//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;
}
}
}
}
Jak darrengorman skomentował Java [ '] (http://docs.oracle.com/javase/8/ Enum' docs/api/java/lang/Enum.html) są * niezwykle * poręczne, gdy już się ich pozbywasz - wcale nie bałagan. Są znacznie bardziej elastyczne i praktyczne niż zwykłe wyliczenia (jedynie wartość liczbowa z etykietą), jak widać na innych platformach. Zobacz [Oracle Tutorial] (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html). Odkryj zoptymalizowane implementacje 'Set' /' Map': ['EnumSet'] (http://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html) & [' EnumMap'] (http://docs.oracle.com/javase/8/docs/api/java/util/EnumMap.html). –
Podczas próby zakwalifikowania instrukcji sprawy; w pewnym sensie próbujesz powiedzieć, że mogę mieszać różne typy wyliczeń (nie tylko ten sam typ wyliczeniowy) w pojedynczej instrukcji switch. Java zatrzymała to przy użyciu tego podejścia, jak to omówiono tutaj: http://www.digizol.com/2010/10/enum-case-label-switch-java-qualified.html – lkamal