Java - Enum String
Java enum 是一种特殊的构造,用于表示一组预定义的常量字符串,在应用程序代码中用作常量时能提供代码清晰度。默认情况下,enum string 的表示形式与其声明相同。请看以下示例:
enum WEEKDAY { MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY, SUNDAY }
如果我们直接使用上述 enum、使用 toString() 或使用 name() 方法打印其字符串表示,都会输出与声明相同的字符串。
System.out.println(WEEKDAY.MONDAY); System.out.println(WEEKDAY.MONDAY.toString()); System.out.println(WEEKDAY.MONDAY.name());
输出结果如下所示:
MONDAY MONDAY MONDAY
重写 Enum toString() 方法
现在,如果我们想将默认的字符串表示更改为 enum 的字符串表示,可以为 enum 构造函数的每个值创建一个重写的 toString() 方法,如下所示:
enum WEEKDAY {
MONDAY{
// 每个值重写的 toString() 方法
public String toString() {
return "Day 1 of the Week: Monday";
}
};
// 或者为每个 enum 重写 toString()
// 优先使用值级别的 toString() 方法。
public String toString() {
return "Day 1 of the Week: Monday";
}
}
在这种情况下,我们重写了 enum 的默认 toString() 方法,以提供自定义描述。
示例:在 Java 中重写 toString() 方法
在这个示例中,我们创建了一个 enum WEEKDAY。使用 toString() 方法,为 enum 值设置了自定义描述。
package com.;
enum WEEKDAY {
// enum 值常量
MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY, SUNDAY;
// 为自定义描述重写 toString() 方法
@Override
public String toString() {
return switch(this) {
case MONDAY: yield "Day 1";
case TUESDAY:yield "Day 2";
case WEDNESDAY:yield "Day 3";
case THRUSDAY:yield "Day 4";
case FRIDAY:yield "Day 5";
case SATURDAY:yield "DAY 6";
case SUNDAY: yield "Day 7";
};
}
}
public class Tester {
public static void main(String[] args) {
// 内部调用 toString()
System.out.println(WEEKDAY.MONDAY);
// 显式调用 toString()
System.out.println(WEEKDAY.TUESDAY.toString());
// 调用 name() 方法获取默认名称
System.out.println(WEEKDAY.WEDNESDAY.name());
}
}
输出
让我们编译并运行上述程序,这将产生以下结果 −
Day 1 Day 2 WEDNESDAY
示例:在 Java 中按值重写 toString() 方法
在这个示例中,我们为这个 enum WEEKDAY 的每个值重写了 toString() 方法。这样,我们也可以按这种方式为每个值自定义字符串表示。
package com.;
enum WEEKDAY {
// 为自定义描述重写 toString() 方法
MONDAY{
@Override
public String toString() {
return "Day 1";
}
},
TUESDAY{
@Override
public String toString() {
return "Day 2";
}
},
WEDNESDAY{
@Override
public String toString() {
return "Day 3";
}
},
THRUSDAY{
@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) {
// 内部调用 toString()
System.out.println(WEEKDAY.MONDAY);
// 显式调用 toString()
System.out.println(WEEKDAY.TUESDAY.toString());
// 调用 name() 方法获取默认名称
System.out.println(WEEKDAY.WEDNESDAY.name());
}
}
输出
让我们编译并运行上述程序,这将产生以下结果 −
Day 1 Day 2 WEDNESDAY
enum 的 name() 方法是 final 的,不能被重写。它可以用来获取 enum 的默认名称,而 enum 的字符串表示则由 toString() 方法重写。