在枚举类中使用String和int属性

时间:2018-01-05 22:42:05

标签: java

我在配置属性文件中使用枚举,因此有些值以字符串形式检索,其他值以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;
}

}

2 个答案:

答案 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 {
    ...
}