0

おそらくどこかで議論されていますが、私はそれを見つけることができませんでした。

java.util.Propertiesクラスの静的初期化ブロック内にクラス プロパティ ( ) をロードする必要があります。これは、オブジェクトを作成しなくても、いくつかのクラスの一般的なオプションにアクセスできるようにするためです。そのためには、適切なClassオブジェクトが必要です。しかし、もちろん、そのような Class オブジェクトへのアクセスは object で失敗しnullます。このようなもの。

Class Name {

    private static Properties properties;

    static {
        Name.properties = new Properties();
        Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
    }

}

この状況を処理する方法はありますか?

更新:
それはリソース名でした(私の場合は「/ Name.properties」である必要があります)。他のすべてはOKでした。私からのすべての意味のある回答に対して+1し、...操作を1つずつ確認することを忘れないでください:-)。

4

3 に答える 3

3

propertiesフィールドは でなければなりませんstatic。そして、load静的変数を初期化する必要がある前に、proeprties = new Properties()その後呼び出すことができますload

于 2013-11-06T11:36:32.823 に答える
1

プロパティを静的として宣言して初期化する

static Properties properties;

また

static Properties properties = new Properties();

静的ブロックは

static {
    try {
        properties = new Properties(); //if you have not initialize it already
        Name.properties.load(Name.class.getResourceAsStream("Name.properties"));
    } catch (IOException e) {
        throw new ExceptionInInitializerError(e); //or some message in constructor
    }
}

プロパティファイルの読み込み中に IOException をキャッチする必要があります

于 2013-11-06T11:37:39.193 に答える
0

すべての提案に基づく最終的なコードは次のようになります。

Class Name {

    private static final Properties properties = new Properties();

    static {
        try {
            InputStream stream = Name.class.getResourceAsStream("/Name.properties");
            if (stream == null) {
                throw new ExceptionInInitializerError("Failed to open properties stream.");
            }
            Name.properties.load(stream);
        } catch (IOException e) {
            throw new ExceptionInInitializerError("Failed to load properties.");
        }
    }
}
于 2013-11-06T12:02:22.607 に答える