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 по-прежнему равен нулю.

Другие вопросы по тегам