0

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

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

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

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

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

谢谢。

4

3 回答 3

4

用于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);
}
于 2012-10-21T05:22:04.727 回答
1

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

于 2012-10-21T05:21:15.383 回答
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);
}
于 2012-10-21T05:30:38.683 回答