Java - System.getProperty возвращает значение NULL в окончательной инициализации атрибута класса, но не в методе
Я установил опцию JVM с -Dpath.eai = C:\home\eai. В зависимости от того, где я вызываю System.getProperty("path.eai"), у меня не будет того же самого результата.
Вызвать инициализацию финального атрибута класса
public static final String DIRECTORY = System.getProperty("path.eai");
private static String printDirectory() {
System.out.println("My directory is " + DIRECTORY);
}
==> КАТАЛОГ пуст.
Вызов внутри метода
private static final String EAI_PATH_PROPERTY = "path.eai";
public static final String DIRECTORY = getEaiPath();
private static String getEaiPath() {
String eaiPath = System.getProperty(EAI_PATH_PROPERTY);
return eaiPath;
}
private static String printDirectory() {
System.out.println("My directory is " + DIRECTORY);
}
==> КАТАЛОГ - C:\home\eai
1 ответ
Похоже, это проблема порядка инициализации. Вы, вероятно, обращаетесь к DIRECTORY из статического блока или из другого места, где он пытается получить к нему доступ до его инициализации.
Я не мог воспроизвести проблему, о которой вы говорите, кроме как инициализировать что-то до инициализации DIRECTORY, например,
class A {
public static final String FILE = printDirectory() + "/hello.txt";
public static final String DIRECTORY = System.getProperty("path.eai");
private static String printDirectory() {
System.out.println("My directory is " + DIRECTORY);
return DIRECTORY;
}
}
Здесь FILE инициализируется до DIRECTORY. Во время инициализации ФАЙЛА DIRECTORY по-прежнему равен нулю.