Что я могу включить?
Начиная с Java 6, вы можете включать только следующие типы:
SwitchStatement:
switch ( Expression ) SwitchBlock
Тип Expression
должен быть char
, byte
, short
, int
, Character
, Byte
, Short
, Integer
или enum
или произошла ошибка во время компиляции. [...] Каждое case
константное выражение, связанное с оператором switch, должно присваиваться типу switch Expression
.
Так что я могу сделать?
В зависимости от вашего варианта использования вы можете использовать enum
вместо String
. В отличие от String
, вы можете включить enum
. Вот пример:
public class EnumSwitchSample {
static enum Color {
BLACK, WHITE;
}
public static void main(String[] args) {
test(Color.valueOf("BLACK"));
// "It's black!"
test(Color.WHITE);
// "It's white!"
}
static void test(Color c) {
switch (c) {
case BLACK:
System.out.println("It's black!");
break;
case WHITE:
System.out.println("It's white!");
break;
}
}
}
Тем не менее, enum
в Java на самом деле довольно мощный, и вам может даже не понадобиться switch
на нем. Вот пример:
public class EnumMemberExample {
static enum Mood {
SCREAM("I'M LOUD AND OBNOXIOUS!!!") {
@Override public String say(String statement) {
return statement.toUpperCase().replaceAll("!", "!!!");
}
},
WHISPER("Ssh... Be vewy vewy quiet...") {
@Override public String say(String statement) {
return statement.toLowerCase().replaceAll("!", "...");
}
};
final String msg;
Mood(String msg) { this.msg = msg; }
String getMessage() { return msg; }
abstract String say(String statement);
}
public static void main(String[] args) {
test(Mood.SCREAM);
// "I'M LOUD AND OBNOXIOUS!!!"
// "HELLO!!! HOW ARE YOU!!!"
test(Mood.WHISPER);
// "Ssh... Be vewy vewy quiet..."
// "hello... how are you..."
}
static void test(Mood m) {
System.out.println(m.getMessage());
System.out.println(m.say("Hello! How are you!"));
}
}
Смотри также
Похожие вопросы