![](/img/trans.png)
[英]How can I override the toString method of an ArrayList in Java?
[英]How can I override toString() Method for all enum classes?
是否可以為所有Enum
類重寫方法toString
,而不是僅在枚舉類中重寫它。 例:
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();
}
}
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();
}
}
這可以通過兩種不同的方式使用:
您仍然可以在枚舉中覆蓋toString()
,但復制粘貼錯誤的可能性要小得多,並且能夠通過一次代碼更改來更改每個人。 例如
enum Coins { PENNY(1), POUND(100), NOTE(500); // snip public String toString() { return Utils.toEnumString(this); } }
您可以在其他方法中使用它,例如:
System.out.println(Utils.toEnumString(Coins.PENNY)); preparedStatement.setString(1, Utils.toEnumString(Coins.POUND));
如果要在項目中添加另一個庫,也可以使用Apache Commons或Google Guava執行相同的操作:
WordUtils.capitalizeFully
CaseFormat.UpperCamel
我會創建一個委托/ 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.