OPの問題と同じように、ファイルシステムの.propertiesファイルから読み込まれる最終フィールドに値を割り当てる方法を見つける必要があったため、それまでアプリは値を認識できませんでした起こりました。アプリの起動時に .properties ファイルの内容を Properties オブジェクトに読み取った後、一般化されたメソッド呼び出しを使用して値を割り当てるという Hail Mary パスは、ありがたいことにうまくいきました。また、番号を制限します。Properties オブジェクトが現在 null であるかどうかを確認するためのコード チェックによって、アプリがメモリに読み込まれるたびにファイルを 1 回読み取る必要があります。しかし、一度割り当てられると、フィールドを操作して「最終」ステータスを変更する以外は、最終フィールドの値を変更することはできません。https://stackoverflow.com/a/3301720/1216686 - 卑劣ですが、大好きです!)。NPE などの一般的な実行時エラー チェックを簡潔にするために省略したコード例:
import java.util.Properties;
public class MyConstants {
private static Properties props; // declared, not initialized,
// so it can still be set to
// an object reference.
public static String MY_STRING = getProperty("prop1name", "defaultval1");
public static int MY_INT = Integer.parseInt(getProperty("prop2name", "1"));
// more fields...
private static String getProperty(String name, String dflt) {
if ( props == null ) {
readProperties();
}
return props.getProperty(name, dflt);
}
private static void readProperties() {
props = new Properties(); // Use your fave way to read
// props from the file system; a permutation
// of Properties.load(...) worked for me.
}
// Testing...
public static void main(String[] args) {
System.out.println(MY_STRING);
System.out.println(MY_INT);
}
}
これにより、プロパティを外部化してアプリに読み込むことができ、値を保持するために使用されるフィールドを「最終」としてマークすることができます。また、Properties クラスの getProperty() により、メソッドの呼び出しコードがデフォルト値を渡して、プロパティのキーと値のペアが外部で見つからなかった場合に使用できるため、最終的なフィールド値の戻り値を保証することもできます。 .properties ファイル。