【发布时间】:2018-09-14 06:43:41
【问题描述】:
变量的名称可以更改,不会影响逻辑。但是 Enum 中的 name() 方法返回一个常量名称作为值,因此它可以破坏现有代码。我应该避免使用name()吗?
例如,
public enum Example1 {FOO, BAR}
将FOO 名称重构为FOO2 将制动Example1.FOO.name().equals("FOO")。
public enum Example2 {
FOO("FOO"),
BAR("BAR");
String code;
private Example2(final String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
在这种情况下,将FOO 名称更改为FOO2 不会制动Example2.FOO.getCode().equals("FOO")。
【问题讨论】:
-
你写
Example1.FOO.name().equals("FOO")是为了什么? -
name()方法返回枚举值的名称。如果您想要一个可读的字符串,请使用toString()(默认情况下返回名称)。 -
But name() method in Enum returns a variable name as a value so it can break existing code.你认为你可以改变“FOO”的名字吗? -
@ruakh 例如从 URL 参数读取值
-
鉴于javadoc 中的内容,我避免使用
.name()
标签: java enums anti-patterns