如何为所有枚举类重写toString()方法?

时间:2015-08-11 15:35:16

标签: java enums tostring

是否可以覆盖所有toString类的方法Enum,而不是仅在枚举类中覆盖它。示例:

Coins.java:

enum Coins { PENNY(1), POUND(100), NOTE(500); 

    private int value;

    Coins(int coinValue) {
         value = coinValue;
    }
     [...] // Other code

    public String toString() {
         return name().charAt(0) + name().substring(1).toLowerCase();
    }
}

DaysOfWeek.java:

enum DaysOfWeek { MONDAY(1), TUESDAY(2), WEDNESDAY(3);

     private int dayID;

     DaysOfWeek(int ID) {
        dayID = ID;
     }
       [...] // Other code

     public String toString() {
         return name().charAt(0) + name().substring(1).toLowerCase();
     }
 }

目前,我必须在每个枚举类中覆盖toString()。我是否可以创建一个通用toString方法来覆盖所有枚举类型的类,而不在每个枚举类型类中实际编写toString

2 个答案:

答案 0 :(得分:9)

没有。您无法覆盖系统的Enum类,也无法创建所有Enum继承的子类,因为它a language feature a lot of special 3}} rules WordUtils.capitalizeFully。但是,您可以创建一个静态辅助方法:

public class Utils {
  public static String toEnumString(Enum<?> inputEnum) {
    return inputEnum.name().charAt(0) + inputEnum.name().substring(1).toLowerCase();
  }
}

这可以通过两种不同的方式使用:

  1. 您仍然可以在枚举中覆盖toString(),但复制粘贴错误的可能性要小得多,并且能够通过一次代码更改来更改每个人。 e.g。

    enum Coins { PENNY(1), POUND(100), NOTE(500); 
    
      // snip 
      public String toString() {
        return Utils.toEnumString(this);
      }
    }
    
  2. 您可以在其他方法中使用它,例如:

    System.out.println(Utils.toEnumString(Coins.PENNY));
    preparedStatement.setString(1, Utils.toEnumString(Coins.POUND));
    
  3. 如果您想在项目中添加另一个库,也可以使用Apache Commons或Google Guava做同样的事情:

答案 1 :(得分:1)

我会创建一个所有enum toString()方法调用的委托/ utlity / helper。这样就可以避免在希望转换为String时调用实用程序类。

private static class CommonEnumToString {
    static String toString(Enum<?> e) {
        return e.name().charAt(0) + e.name().substring(1).toLowerCase();
    }
}

更新toString()以调用帮助程序

enum Coins {
    PENNY(1), POUND(100), NOTE(500);
    private int value;
    Coins(int coinValue) {
        value = coinValue;
    }
    public String toString() {
        return CommonEnumToString.toString(this);
    }
}

enum DaysOfWeek {
    MONDAY(1), TUESDAY(2), WEDNESDAY(3);
    private int dayID;
    DaysOfWeek(int ID) {
        dayID = ID;
    }
    public String toString() {
        return CommonEnumToString.toString(this);
    }
}

测试

public static void main(String[] args) {
    System.out.println(DaysOfWeek.WEDNESDAY); // ==> Wednesday
    System.out.println(Coins.PENNY);          // ==> Penny
}