2016-12-02 74 views
0

單例應該用一個參數初始化。我想使用靜態塊從系統屬性中獲取參數,而不是使用setter方法。我不想使用setter,因爲這個單例可能會同時使用,我不想讓setter同步。我不想使用構造函數,因爲我使用枚舉使其成爲單例,並且枚舉不能使用運行時參數定義實例。在Java的單例中使用系統屬性是否好?

是否有任何理由讓我使用setter而不是系統屬性?我知道這意味着要注意啓動Java應用程序的另一件事,它不像程序那樣。謝謝。

回答

0

你說得對。系統屬性是靜態的,所以爲什麼不爲它們製作靜態的持有者? 爲例,而不是從System.getProperty獲取文件分割符或line.sparator每個我需要他們的時候,我可以讓他們像這樣:

public class MyConstants { 

    public static final String FILE_SEPARATOR = System.getProperty("file.separator"); 
    public static final String LINE_SEPARATOR = System.getProperty("line.separator"); 

,然後用它們作爲MyConstants.FILE_SEPARATOR或MyConstants.LINE_SEPARATOR

這只是您喜歡的代碼風格的問題。相反:非靜態的setter或構造函數需要參數,當你打算讓同一個類的不同實例具有不同的值時。通常不需要靜態設置器...只是在某些時候像Spring這樣的框架正在使用中和/或類級別屬性的實際值不在系統屬性中,而是某種類型的.properties文件中。

相關問題