Есть следующий код:
TerminalsTypes terminalType = TerminalsTypes.valueOf(terminalTypeId) != null
? TerminalsTypes.valueOf(terminalTypeId)
: TerminalsTypes.SPR;
switch (terminalType) {
...
}
И при этом Intellij Idea подсвечивает terminalType
внутри switch
и при наведении мышки выдаёт следующее сообщение:
Dereference of 'terminalType' may produce 'java.lang.NullPointerException'
Почему это сообщение выводится несмотря на то, что при инициализации terminalType
очевидно, что его значение быть null
не может?
UPD
Код метода TerminalsTypes.valueOf
:
public enum TerminalsTypes {
...
public static TerminalsTypes valueOf(int type) {
switch (type) {
case 0:
return SPR;
...
default:
return null;
}
}
...
}
Среда действует довольно логично: TerminalsTypes.valueOf(terminalTypeId)
может вернуть null
.
В коде есть две ветки, в одной из которых TerminalsTypes.valueOf(terminalTypeId)
, которая может вернуть null, поэтому логичное предупреждение, что при использовании результата может быть исключение.
Решением может быть сохранение результата вызова TerminalsTypes.valueOf(terminalTypeId)
в локальную переменную, которая уже будет использоваться в проверке:
TerminalsTypes terminalTypeValue = TerminalsTypes.valueOf(terminalTypeId)
TerminalsTypes terminalType = terminalTypeValue != null
? terminalTypeValue
: TerminalsTypes.SPR;
switch (terminalType) {
...
}
Совершенно не очевидно. Например такой вариант
class TerminalsTypes {
public static TerminalsTypes valueOf(int terminalTypeId) {
return Math.random() > 0.5 ? new TerminalsTypes() : null;
}
}
Будет выдавать разное при разных вызовах
Чтобы избежать этого можно добавить такой код
TerminalsTypes terminalType = TerminalsTypes.valueOf(terminalTypeId);
if(terminalType == null) {
terminalType = TerminalsTypes.SPR;
}
Или такой
TerminalsTypes terminalType = TerminalsTypes.valueOf(terminalTypeId);
terminalType = terminalType == null ? TerminalsTypes.SPR : terminalType;
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите пожалуйста есть ли способ используя Google Maps API под Android отображать только конкретную страну/город вместо всей карты?
Использую библиотеку JSOUPВот кусок HTML, который я парсю:
Как зафиксировать текст, что бы при разных разрешениях он не делился пополам, а переносился полностью?