Java Enum 怎么转成字符串?

文章导读
Previous Quiz Next Java enum 是一种特殊的构造,用于表示一组预定义的常量字符串,在应用程序代码中用作常量时能提供代码清晰度。默认情况下,enum string 的表示形式与其声明相同。请看以下示例:
📋 目录
  1. 重写 Enum toString() 方法
A A

Java - Enum String



Previous
Quiz
Next

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() 方法重写。