2012-10-21 36 views
0

編寫我的程序時,我通常使用java.util.Properties類來加載包含配置參數的屬性文件。在Java中管理屬性

我通常寫一個有get方法例如檢索各個屬性的實用程序類:

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

這種方法很適合我很好,但是當有一個很長的屬性來處理的列表它變得有點乏味。

我正在尋找更好的方法來做到這一點。

謝謝。

回答

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); 
} 
+0

它如何幫助,當他可以直接從'屬性 - > String getProperty(String key)'方法獲取屬性? –

+0

@YogendraSingh你可以想到,但hashmap將提供不斷的訪問時間,所以這意味着更好的性能。 – Juvanis

+0

同意,但我相信OP沒有詢問性能改進。他的問題似乎圍繞着數據類型轉換,因爲他需要圍繞它們編寫特定的方法。 –

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); 
}