Почему функция nullPrintStream() в java/lang/System сравнивает currentTimeMillis() с нолем?
При загрузке класса System метод <clinit>
создает переменные in
, out
и err
PrintStream
в null
с помощью метода nullPrintStream()
:
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
Я понимаю, почему это так, и почему переменные не могут быть созданы во время загрузки, но я смущен, это содержимое этого метода.
Почему он сравнивает currentTimeMillis()
с 0
? В каком случае это сравнение когда-либо вернет false
?
Ответы
Ответ 1
Javadoc для метода nullPrintStream() дает ключ:
Компилятор, однако, не может быть разрешен встроенный доступ к ним, поскольку впоследствии они становятся более разумными by initializeSystemClass().
Это, по-моему, кодирование, чтобы предотвратить компилятор от простой реализации "возврата null".
currentTimeMillis() никогда не будет меньше 0. Но компилятор недостаточно умен, чтобы знать это, и поэтому оставляет условный оператор неповрежденным.