繁体   English   中英

用Java管理属性

[英]Managing Properties in Java

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

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

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

此方法非常适合我,但是当要处理的属性列表很长时,它会变得有些乏味。

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

谢谢。

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

HashMap<String,String> propertiesMap;

然后,根据需要在构造函数或初始化方法中对其进行初始化。

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

使用来自属性文件的数据填充哈希图。

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

然后编写一个通用方法以获取具有其名称的特定属性:

public String getProperty(String name)
{
    return propertiesMap.get(name);
}

如果您使用的是Java EE,则可以尝试使用这种方法,该方法利用了CDI(上下文和依赖注入): 使用CDI的Java EE 6中的应用程序配置

另一种方法是可以使用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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM