像吸气剂一样使用枚举?

时间:2016-02-05 13:25:19

标签: java enums syntactic-sugar

我有一个用于跟踪重要系统变量的util类:

public static final String REQUEST_ADDRESS = "http.request.address";  
public static final String REQUEST_PORT = "http.request.port";

public static final String get(String property) {
    return System.getProperty(property);
}

我可以像这样检索这些值:

String port = SystemPropertyHelper.get(SystemPropertyHelper.REQUEST_PORT);

在Java中,是否有可能将它们视为枚举?

REQUEST_PORT {
    return System.getProperty("http.request.port");
}

String port = SystemPropertyHelper.REQUEST_PORT;

4 个答案:

答案 0 :(得分:3)

我就这样解决了。

public static final String REQUEST_PORT = System.getProperty("http.request.port");

答案 1 :(得分:2)

        enum SystemPropertyHelper {
            REQUEST_PORT("http.request.port"), ...;

            private String key;

            Config(String key) {
                this.key = key;
            }

            public String get() {
             return System.getProperty(key);
            }
        }

并像SystemPropertyHelper.REQUEST_PORT.get();

一样使用它

答案 2 :(得分:2)

当然,您可以像这样创建enum,这样您就可以访问属性名称和值:

public enum SystemPropertyEnum {
    REQUEST_PORT("http.request.port"),
    REQUEST_ADDRESS("http.request.address");

    private String propertyName;
    private String value;

    SystemPropertyEnum(final String propertyName) {
        this.propertyName = propertyName;
        this.value = System.getProperty(propertyName);
    }

    public String getPropertyName() {
        return propertyName;
    }

    public String getValue() {
        return value;
    }
}

但是,如@halloei所示,您可以通过仅为您的属性使用public static final String变量来避免调用getter。

答案 3 :(得分:1)

你也可以这样做:

public enum Properties {
    REQUEST_PORT("http.request.port"),
    REQUEST_USE_SSL("http.request.ssl");
    // Add others...

    private final String value;

    Properties(String value) {
        this.value = System.getProperty(value);
    }

    public String getValue() {
        return this.value;
    }
}

这可以像:

String port = Properties.REQUEST_PORT.getValue();