Schakel Enum in Java in

Waarom kun je in Java geen enum inschakelen? Het lijkt eenvoudig genoeg om te doen en zou een handige code opleveren. Deze vraag kan ook van toepassing zijn op String‘s. U kunt een charinschakelen, maar geen String…?


Antwoord 1, autoriteit 100%

Je kunt opsommingen zeker inschakelen. Een voorbeeld gepost vanuit de Java-tutorials.

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}
public class EnumTest {
    Day day;
    public EnumTest(Day day) {
        this.day = day;
    }
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: 
                System.out.println("Mondays are bad.");
                break;
            case FRIDAY: 
                System.out.println("Fridays are better.");
                break;
            case SATURDAY:
            case SUNDAY: 
                System.out.println("Weekends are best.");
                break;
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
}

Antwoord 2, autoriteit 31%

Je kunt eigenlijk switchop enums, maar je kunt niet switchop Strings totdat Java 7. Je zou kunnen overwegen om polymorfe methodeverzending te gebruiken met Java enums in plaats van een expliciete switch. Merk op dat enums objecten zijn in Java, niet alleen symbolen voor ints zoals ze zijn in C/C++. Je kunt een methode op een enum-type hebben, en in plaats van een switchte schrijven, gewoon de methode aanroepen – één regel code: klaar!

enum MyEnum {
    SOME_ENUM_CONSTANT {
        @Override
        public void method() {
            System.out.println("first enum constant behavior!");
        }
    },
    ANOTHER_ENUM_CONSTANT {
        @Override
        public void method() {
            System.out.println("second enum constant behavior!");
        }
    }; // note the semi-colon after the final constant, not just a comma!
    public abstract void method(); // could also be in an interface that MyEnum implements
}
void aMethodSomewhere(final MyEnum e) {
    doSomeStuff();
    e.method(); // here is where the switch would be, now it's one line of code!
    doSomeOtherStuff();
}

Antwoord 3, autoriteit 9%

Eerst kunt u een enumin Java inschakelen. Ik neem aan dat je van plan was te zeggen dat je het niet kunt, maar je kunt het wel. chars hebben een vast waardenbereik, dus het is gemakkelijk te vergelijken. Strings kunnen van alles zijn.

Een switch-instructie wordt meestal geïmplementeerd als een jump-tabel (vertakkingstabel)in de onderliggende compilatie, wat alleen mogelijk is met een eindige reeks waarden. C# kanstrings inschakelen, maar het veroorzaakt een prestatievermindering omdat een springtabel niet kan worden gebruikt.

Java 7 en hoger ondersteunt Stringschakelaarsmet dezelfde kenmerken.


Antwoord 4, autoriteit 9%

Artikel over Programming.Guide: Schakel enum in


enum MyEnum { CONST_ONE, CONST_TWO }
class Test {
        public static void main(String[] args) {
            MyEnum e = MyEnum.CONST_ONE;
            switch (e) {
                case CONST_ONE: System.out.println(1); break;
                case CONST_TWO: System.out.println(2); break;
            }
        }
    }

Switches voor strings zijn geïmplementeerd in Java 7.


Antwoord 5, autoriteit 6%

Misschien gebruikt u de opsommingen verkeerd in de schakelgevallen. In vergelijking met het bovenstaande voorbeeld van CoolBeans.. zou je het volgende kunnen doen:

switch(day) {
    case Day.MONDAY:
        // Something..
        break;
    case Day.FRIDAY:
        // Something friday
        break;
}

Zorg ervoor dat u de werkelijke enum-waarden gebruikt in plaats van EnumType.EnumValue

Eclipse wijst echter op deze fout..


Antwoord 6

Eigenlijk kun je een switch-statement gebruiken met Strings in Java…helaas is dit een nieuwe functie van Java 7, en de meeste mensen gebruiken Java 7 nog niet omdat het zo nieuw is.

Other episodes