В настоящее время я исправляю ошибку в чужом Java-коде, но я не могу объяснить ошибку. Код в вопросе заключается в следующем Условный оператор:Почему этот короткозамкнутый оператор if-statement отсутствует?
if (locked && DEBUG_ENABLED
&& owner != null
&& (owner.equals(playerName) || subowner.equals(playerName))
&& handleCommand(playerName, message)) {
....
} else {
....
}
В которой DEBUG_ENABLED
инициализируется как private static boolean DEBUG_ENABLED = false;
и handleCommand
функции, как это:
public boolean handleCommand(String name, String msg) {
if(msg.equals("Command1")) {
....
} else if(msg.equals("Command2")) {
....
} ....
} else { // No matching command
return false;
}
return true;
}
озадачивает меня в том, что даже если DEBUG_ENABLED
установлен в ложь , код по-прежнему вызывает и выполняет функцию handleCommand
. Я всегда думал, что этого не должно произойти из-за короткого замыкания. Сам оператор if в итоге по-прежнему оценивается как false, поскольку выполняется только код внутри else-блока в первом фрагменте.
Итак, как получилось, что этот оператор if ведет себя так? Не удается ли коротко замыкаться или я не понимаю принцип, или что-то совершенно иное не так с этой частью кода? (Кроме того, отсутствует нулевая проверка для subowner
, которая выполняется вне этой части.)
Это короткое замыкание для меня. На какой версии Java вы работаете? И все равно, что 'DEBUG_ENABLED' может быть« истинным »? –
Опишите обстоятельства, в которых вы работаете, и как точно вы знаете, что это не короткое замыкание. – aring
Это слишком короткое замыкание для меня, вы на 100% уверены, что 'DEBUG_ENABLED == false'? – BackSlash