Java 枚举是一种特殊的结构,用于表示一组预定义的常量字符串,并在应用程序代码中作为常量使用,为代码提供清晰性。默认情况下,枚举的字符串表示形式与其声明相同。请看以下示例:
enum WEEKDAY { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
如果我们直接使用枚举,或者使用 toString()
或者 name()
方法来打印上述枚举的字符串表示形式,它将打印与声明相同的字符串。
System.out.println(WEEKDAY.MONDAY);
System.out.println(WEEKDAY.MONDAY.toString());
System.out.println(WEEKDAY.MONDAY.name());
输出结果如下:
MONDAY
MONDAY
MONDAY
覆写枚举的 toString()
方法
如果我们想要改变枚举的默认字符串表示形式,我们可以为每个枚举值覆写 toString()
方法,如下所示:
enum WEEKDAY {
MONDAY {
@Override
public String toString() {
return "Day 1 of the Week: Monday";
}
};
@Override
public String toString() {
return "Default Day of the Week";
}
}
在这个例子中,我们覆写了枚举的默认 toString()
方法,以给出一个自定义的描述。
示例:覆写 Java 中的 toString()
方法
在这个例子中,我们创建了一个枚举 WEEKDAY
。使用 toString()
方法,我们为枚举值设置了自定义描述。
package com.tutorialspoint;
enum WEEKDAY {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
@Override
public String toString() {
return switch(this) {
case MONDAY -> "Day 1";
case TUESDAY -> "Day 2";
case WEDNESDAY -> "Day 3";
case THURSDAY -> "Day 4";
case FRIDAY -> "Day 5";
case SATURDAY -> "Day 6";
case SUNDAY -> "Day 7";
};
}
}
public class Tester {
public static void main(String[] args) {
System.out.println(WEEKDAY.MONDAY);
System.out.println(WEEKDAY.TUESDAY.toString());
System.out.println(WEEKDAY.WEDNESDAY.name());
}
}
编译并运行上述程序,会产生以下结果:
Day 1
Day 2
WEDNESDAY
示例:按值覆写 toString()
方法
在这个例子中,我们按值覆写了枚举 WEEKDAY
的 toString()
方法。这样我们可以按值定制字符串表示形式。
package com.tutorialspoint;
enum WEEKDAY {
MONDAY {
@Override
public String toString() {
return "Day 1";
}
},
TUESDAY {
@Override
public String toString() {
return "Day 2";
}
},
WEDNESDAY {
@Override
public String toString() {
return "Day 3";
}
},
THURSDAY {
@Override
public String toString() {
return "Day 4";
}
},
FRIDAY {
@Override
public String toString() {
return "Day 5";
}
},
SATURDAY {
@Override
public String toString() {
return "Day 6";
}
},
SUNDAY {
@Override
public String toString() {
return "Day 7";
}
};
}
public class Tester {
public static void main(String[] args) {
System.out.println(WEEKDAY.MONDAY);
System.out.println(WEEKDAY.TUESDAY.toString());
System.out.println(WEEKDAY.WEDNESDAY.name());
}
}
编译并运行上述程序,会产生以下结果:
Day 1
Day 2
WEDNESDAY
注意 name()
方法是最终的(final),不能被覆写。它可以用来获取枚举的默认名称,而枚举的字符串表示形式则可以通过覆写 toString()
方法来改变。