当前位置 : 主页 > 手机开发 > 其它 >

通过访问器方法封装java.util.Properties访问被认为是不好的做法?

来源:互联网 收集:自由互联 发布时间:2021-06-19
我正在使用 java.util.Properties来处理我正在进行的项目.我有一个使用Properties实例管理.properties文件的类,名为PropertiesManager.此类管理从光盘加载和保存.properties文件. 现在,因为我想确保只能
我正在使用 java.util.Properties来处理我正在进行的项目.我有一个使用Properties实例管理.properties文件的类,名为PropertiesManager.此类管理从光盘加载和保存.properties文件.

现在,因为我想确保只能访问有效的属性,并且只要属性不在文件中,就会使用默认值,我为文件的每个属性添加了getter和setter.

问题是使类PropertiesManager非常大.单独的getter和setter(带注释/空行)是300行代码.因此,即使我将加载/保存转移到另一个类(继承等),它仍然是大的.

这不是实际的代码,但它给你的想法:

import java.util.Properties;

public class PropertiesManager {
    private Properties properties;

    public PropertiesManager() {
        // constructor
    }

    private void save() {
        // save in .properties file
    }

    private void load() {
        // load from .properties file
    }

    public String getPropertyName1() {
        return properties.getProperty("PropertyName1", "Property1DefaultValue");
    }

    // 28 more getters here

    public String getPropertyName30() {
        return properties.getProperty("PropertyName30", "Property30DefaultValue");
    }

    public void setPropertyName1(String value) {
        properties.setProperty("PropertyName1", value);
    }

    // 28 more more setters here

    public void setPropertyName30(String value) {
        properties.setProperty("PropertyName30", value);
    }
}

以这种方式封装对Properties实例的访问权限被认为是不好的做法吗?我应该直接使用Properties实例而不是使用访问器方法吗?还有其他解决方案吗?

我只是将它更改为使用枚举的单个getter / setter:

public class PropertiesManager {
    ...
    public String getProperty(EnumProp enumProp) {
        return properties.getProperty(enumProp.getKey(), enumProp.getDefaultValue());
    }

    public void setProperty(EnumProp enumProp, String value) {
        properties.setProperty(enumProp.getKey(), value);
    }
}

有了这个枚举:

public enum EnumProp {
    PROP_1("key", "defaultValue"),
    ...

    EnumProp(String key, String defaultValue){
        this.key = key;
        this.defaultValue = defaultValue;
    }
}
网友评论