簡體   English   中英

如何為所有枚舉類重寫toString()方法?

[英]How can I override toString() Method for all enum classes?

是否可以為所有Enum類重寫方法toString ,而不是僅在枚舉類中重寫它。 例:

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

不能。你不能覆蓋系統的Enum類,也不能創建一個繼承所有Enum的子類,因為它是一個具有許多 特殊 規則 的語言特性 但是,您可以創建一個靜態輔助方法:

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

這可以通過兩種不同的方式使用:

  1. 您仍然可以在枚舉中覆蓋toString() ,但復制粘貼錯誤的可能性要小得多,並且能夠通過一次代碼更改來更改每個人。 例如

     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)); 

如果要在項目中添加另一個庫,也可以使用Apache Commons或Google Guava執行相同的操作:

我會創建一個委托/ utlity / helper來調用所有enum toString()方法。 這樣可以避免在希望轉換為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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM