Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API与框架

Java 类引用

Java 有用资源

Java - 枚举字符串



Java 枚举 是一种特殊的构造,用于表示一组预定义的常量字符串,并在用作应用程序代码中的常量时提高代码清晰度。默认情况下,枚举字符串表示与其声明相同。请考虑以下示例

enum WEEKDAY { MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, 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

重写 Enum toString() 方法

现在,如果我们想将默认字符串表示更改为枚举的字符串表示,我们可以为枚举构造器的每个值创建一个重写的toString()方法,如下所示

enum WEEKDAY {
	MONDAY{
      // overridden toString() method per value
      public String toString() {
        return "Day 1 of the Week: Monday";
      }
	};
	
	// or override toString() per enum
	// priority will be given to value level toString() method.
    public String toString() {
       return "Day 1 of the Week: Monday";
    }	
}

在这种情况下,我们正在重写枚举的默认 toString() 方法以提供自定义描述。

示例:在 Java 中重写 toString() 方法

在这个示例中,我们创建了一个枚举 WEEKDAY。使用 toString() 方法,我们设置了枚举值的自定义描述。

package com.tutorialspoint;

enum WEEKDAY { 
   // enum value constants
   MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY, SUNDAY;

   // override the toString() method for custom description
   @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) {
      // invoke toString() internally
      System.out.println(WEEKDAY.MONDAY);
      // invoke toString explicitly	  
      System.out.println(WEEKDAY.TUESDAY.toString());
      // invoke name() method to get the default name
      System.out.println(WEEKDAY.WEDNESDAY.name());
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Day 1
Day 2
WEDNESDAY

示例:在 Java 中按值重写 toString() 方法

在这个示例中,我们重写了此枚举 WEEKDAY 的每个值的 toString() 方法。通过这种方式,我们也可以按这种方式自定义每个值的字符串表示。

package com.tutorialspoint;

enum WEEKDAY {
   
   // override the toString() method for custom description
   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) {
      // invoke toString() internally
      System.out.println(WEEKDAY.MONDAY);
      // invoke toString explicitly	  
      System.out.println(WEEKDAY.TUESDAY.toString());
      // invoke name() method to get the default name
      System.out.println(WEEKDAY.WEDNESDAY.name());
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Day 1
Day 2
WEDNESDAY

enum name() 方法是 final 的,不能被重写。当枚举的字符串表示被 toString() 方法重写时,它可以用于获取枚举的默认名称。

广告