構成ファイルからいくつかのログ メッセージを読み込もうとしていますが、enum
名前を s と入力するときにタイプミスに遭遇するのではなく、を介してそれらの名前を参照したいと思いますString
。だからここに私のセットアップがあります:
public class Log {
private static final Logger LOGGER = Logger.getLogger(Log.class);
private static final String MESSAGES_FILE_PATH = "conf/log_message.conf";
private static final Properties MESSAGES = new Properties();
static {
try {
MESSAGES.load(new FileInputStream(new File(MESSAGES_FILE_PATH)));
}
catch(IOException ioe) {
LOGGER.fatal("Unable to load log messages from file: " + MESSAGES_FILE_PATH, ioe);
}
}
public enum Message {
//Main
PROGRAM_EXIT,
THREAD_INTERRUPTED,
FATAL_TERMINATING_ERROR,
SHUTDOWN_HOOK_EXCEPTION,
IO_READ_ATTEMPT,
IO_READ_FAILURE,
IO_WRITE_ATTEMPT,
IO_WRITE_FAILURE,
IOEXCEPTION,
//...
private final String text;
private Message() {
text = MESSAGES.getProperty(name());
}
//...
}
}
私の懸念は、 s が初期化Log
される前に静的初期化子が実行されない、いくつかのフリンジ シナリオがあるかもしれないということです。enum
私はコードをテストしましたが、これまでのところ正常に動作し、論理的には、静的初期化子が最初に実行されないMessage
可能性があることはわかりません (参照は を通過Log
する必要があるためLog.Message.IOEXCEPTION
)。それでも、私はセットアップについて少し不安であり、アプリがクラッシュする可能性のある抜け穴を残したくありません. それで、これは安全ですか?