用Java管理属性

时间:2012-10-21 05:01:41

标签: java properties

编写程序时,我通常使用java.util.Properties类来加载包含配置参数的属性文件。

我通常编写一个实用程序类,它具有检索单个属性的方法,例如:

public long getConnectionTimeout() {
   String textVal=getProperty("connectionTimeout", "1000");
   return Long.parseLong(textVal); 
}

这种方法很适合我,但是当需要处理很长的属性列表时,它会变得有点乏味。

我正在寻找更好的方法来做到这一点。

感谢。

3 个答案:

答案 0 :(得分:4)

使用HashMap存储将与您的属性文件关联的属性,如下所示。在实用程序类中,创建一个HashMap实例字段。

HashMap<String,String> propertiesMap;

然后在构造函数或初始化方法中初始化它,您更喜欢。

propertiesMap = new HashMap<String,String>();

使用来自属性文件的数据填充hashmap。

for (String key : properties.stringPropertyNames()) 
{
    String value = properties.getProperty(key);
    propertiesMap.put(key, value);
}

然后编写一个泛型方法来获取名称为

的特定属性
public String getProperty(String name)
{
    return propertiesMap.get(name);
}

答案 1 :(得分:1)

如果您正在使用Java EE,则可以尝试使用此方法,该方法利用CDI(上下文和依赖注入): Applicaction configuration in Java EE 6 using CDI

答案 2 :(得分:1)

另一种方法是使用Enums。 这样,您就可以使用常量直接访问属性。

public static void main(String[] args) {
    System.out.println(Properties.USER_NAME.getValue(String.class));
    System.out.println(Properties.CONNECTIION_TIMEOUT.getValue(Integer.class));
}

enum Properties {
    CONNECTIION_TIMEOUT {
        @Override
        public <T> T getValue(Class<T> toClass) {
            return toClass.cast(1000);//your code goes here
        }
    },
    USER_NAME {
        @Override
        public <T> T getValue(Class<T> toClass) {
            return toClass.cast("Test");//your code goes here
        }
    },
    PASS_WORD {
        @Override
        public <T> T getValue(Class<T> toClass) {
            return toClass.cast("Test");//your code goes here
        }
    };
    public abstract <T> T getValue(Class<T> toClass);
}