3

私はApacheCommonsのドキュメントを読み始めましたが、非常に広範囲にわたるため、誰かが簡単な質問に答えてくれることを期待しています。基本的な構成に使用するためだけにすべてを読む必要はありません。私はそれで本当にすぐに忍耐力を失っています-「クイックスタートチャプター」はなく、ライブラリを使用するかどうかを決定する前にすべての詳細を知る必要はありません。

プロパティのルックアップを提供する静的メソッドを持つクラスが必要です(一般的なユースケースだと思います)。

たとえば、クラス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;
4

1 に答える 1

4

初期化するコードを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;
    }
}
于 2012-11-05T09:02:18.853 に答える