2012-11-05 22 views
3

我已經開始閱讀Apache公共資料文檔,但它的內容非常廣泛,所以我希望有人可以回答一個簡單的問題,所以我不需要閱讀所有內容纔開始使用它進行基本配置。我很快失去了耐心 - 沒有「快速入門」章節,在決定是否要使用該庫之前,我不需要知道每一個細節。單身配置類?具體示例

我想(我認爲是一個常見的用例)一個靜態方法提供查找屬性的類。

E.g.在Foo類,我可以使用

Settings.config.getString("paramter"); 

import org.apache.commons.configuration.Configuration; 
import org.apache.commons.configuration.DefaultConfigurationBuilder; 
/** 
    * Settings configuration class 
    */ 
public class Settings { 

    private static final DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); 
    public static final Configuration config= factory.getConfiguration(); 

} 

的問題是,工廠方法可以拋出一個異常!所以這段代碼不能編譯,一個類不能拋出異常,所以我懷疑我需要做更多的編碼。

我懷疑有一個簡單的解決方案。但它肯定不能叫

DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); 
Configuration config= factory.getConfiguration(); 

在每一個我想讀配置的類?


我曾嘗試:

public class Settings { 
public static final Configuration config; 
static { 
    try { 
    DefaultConfigurationBuilder factory; 
    factory = new DefaultConfigurationBuilder("config.xml") ; 
     config = factory.getConfiguration(); 
    } 
    catch (ConfigurationException e) { 
     // Deal with the exception 
    config=null; 
    System.exit(1); 
    } 
} 
} 

但我得到的編譯錯誤:

error: variable config might already have been assigned 
    [javac]  config=null; 

回答

3

你可以把代碼靜態初始化塊來初始化config和處理異常那裏。例如:

public class Settings { 
    public static final Configuration config; 

    static { 
     Configuration c = null; 
     try { 
      DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); 
      c = factory.getConfiguration(); 
     } 
     catch (SomeException e) { 
      // Deal with the exception 
      c = null; 
     } 

     config = c; 
    } 
} 
+0

不會編譯: Settings.java:9:錯誤:變量配置可能尚未初始化 – user1443778

+0

@ user1443778這不是一個完整的例子 - 你必須自己完成它。由於'config'是'final',它必須被初始化。如果發生異常,您必須將其初始化爲某種東西。例如,將其設置爲'null'或其他適當的值(可能是具有默認設置的對象?)在「catch」塊中。 – Jesper

+0

Settings.java:22:error:變量config可能已經被分配了 [javac] \t config = null; 所以它不能是最終的? – user1443778