ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-27 10:00:43  阅读:229  来源: 互联网

标签:software-design java encapsulation


我正在使用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;
    }
}

标签:software-design,java,encapsulation
来源: https://codeday.me/bug/20190727/1552907.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有