String型によるswitch

言語仕様としてはswitchにString型は使用できない。

しかし、enumを経由することによりほぼ実現可能。

  • 単純なケース(文字列とenumのメンバ名が同じ場合)

public enum Day {

SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

THURSDAY, FRIDAY, SATURDAY;

}

switch (Day.valueOf(str)) {

case SATURDAY:

case SUNDAY:

// weekend processing ...

break;

default:

// weekday processing ...

}

  • 汎用

public enum Day {

SUNDAY("日曜"), MONDAY("月曜"), TUESDAY("火曜"), WEDNESDAY("水曜"),

THURSDAY("木曜"), FRIDAY("金曜"), SATURDAY("土曜"), UNKNOWN("");

private String str;

public Day(String str) { this.str = str; }

@Override

public String toString() { return str; }

public Day toDay(String str) {

for (Day day : values()) {

if (day.toString().equals(str))

return day;

}

return UNKNOWN;

}

}

switch (Day.toDay(str)) {

case SATURDAY:

case SUNDAY:

// weekend processing ...

break;

default:

// weekday processing ...

}