что бы вы сказать, является лучшей практикой при реализации следующей задачи:избежать «Потенциальный доступа указателя нулевого»
MyClass myVariable = null;
if (..condition 1..) {
myVariable = new MyClass(1);
} else if (..condition 2..) {
myVariable = new MyClass(2);
}
myVariable.execute();
Каких бы хорошим решением для предупреждения?
отделочного
else
final MyClass myVariable; .... } else { // let's say this assert makes sense here Assert.fail("This should not happen"); }
бросок
RuntimeException
final MyClass myVariable; .... } else { throw new RuntimeException("Some message, like <should not happen>"); }
Проверка на NPE
final MyClass myVariable; .... if (myVariable != null) { myVariable.execute(); }
Другое идеи?
Заранее благодарен!
Вы должны только бросать 'IllegalArgumentException', если есть вызываемый метод * незаконного * аргумента *. В контексте нет указаний на то, что 'condition 1' и' condition 2' являются аргументами проверки. –
@StephenC, я согласен с вашим заявлением. Однако я абсолютно уверен, что «условие» OP зависит от аргумента, который можно упомянуть в исключении. Если это неверно, 'IllegalStateException' звучит лучше. Точка в моем решении состоит в том, что (1) исключение throw является чем-то неправильным и (2) минимизирует дублирование кода: есть только один вызов конструктора. – AlexR
Вы (по сути) рекомендуете, чтобы ОП выбрасывал конкретное исключение, когда он уже предлагает бросить «RuntimeException» или «AssertionError». Это только хорошая рекомендация, если конкретное рекомендуемое исключение * больше * подходит, чем тот, который он/она уже рассматривает. –