我在配置属性文件中使用枚举,因此有些值以字符串形式检索,其他值以int形式检索。现在我有两个构造函数,它可以工作,我只是好奇是有更聪明的方法来解决这个问题(肯定有)。实际上这意味着使用此枚举的类必须知道何时使用defaultValue或defaultAmount ..
public enum TestEnum {
CONFIG_USER("config.foobar.user", "dude"),
CONFIG_PASSWORD("config.foobar.password", "forgetIt"),
MAX_RETRIES("config.foobar.maxRetries", 30),
CONSUMER_THREADS("config.foobar.threads", 2);
private final String property;
private String defaultValue;
private int defaultAmount;
TestEnum(final String property, String defaultValue) {
this.property = property;
this.defaultValue = defaultValue;
}
TestEnum(final String property, final int amount) {
this.property = property;
this.defaultAmount = amount;
}
public String getProperty() {
return property;
}
public String getDefaultValue() {
return defaultValue;
}
public int getDefaultAmount() {
return defaultAmount;
}
}
答案 0 :(得分:3)
我只保留一个值的字段,并在内部处理转换。这样,此类的用户只有一种方法可以在他想要获取值时使用。
像这样(未经测试):
public enum TestEnum {
CONFIG_USER("config.foobar.user", "dude"),
CONFIG_PASSWORD("config.foobar.password", "forgetIt"),
MAX_RETRIES("config.foobar.maxRetries", 30),
CONSUMER_THREADS("config.foobar.threads", 2);
private final String property;
private String value;
TestEnum(final String property, String defaultValue) {
this.property = property;
this.value = defaultValue;
}
TestEnum(final String property, final int amount) {
this.property = property;
this.value = "" + amount; // <-------
}
public String getProperty() {
return property;
}
public String getValue() {
return value;
}
}
已编辑:value
字段更适合成为String
,在具有属性 - 值对的配置上下文中更为通用。
答案 1 :(得分:1)
考虑使用接口来定义常见行为:
interface TestEnum {
public String getProperty();
public String getDefaultValue();
public int getDefaultAmount();
}
然后为每种类型使用两个不同的枚举:
enum StringEnum implements TestEnum {
...
}
enum IntegerEnum implements TestEnum {
...
}