是否可以覆盖所有toString
类的方法Enum
,而不是仅在枚举类中覆盖它。示例:
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
?
答案 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();
}
}
这可以通过两种不同的方式使用:
您仍然可以在枚举中覆盖toString()
,但复制粘贴错误的可能性要小得多,并且能够通过一次代码更改来更改每个人。 e.g。
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做同样的事情:
CaseFormat.UpperCamel
答案 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
}