Правильное использование ключевого слова Java assert
Я никогда не понимал, для чего используется assert
, хотя я читал много примеров, они действительно не дают мне знать, для чего и почему я должен использовать его для.
Итак, вместо того, чтобы спросить пример, я собираюсь предоставить его и сообщить, если это правильное использование assert
.
// The idea is that the `mode` variable should be 0 or 1, and no other number.
switch(mode) {
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
// assert code?
}
Если это правильно, сообщите мне, как использовать его в этом случае. Если это не так, как предполагается, используйте пример. Спасибо заранее
Ответы
Ответ 1
Не в этом случае.
Если вы утверждаете значение, вы делаете выражение о том, что до того, как будет сделана критическая оценка с использованием этого значения, это то, что вы утверждаете. Вы можете утверждать, что значение не является нулевым или оно меньше 2 или что-то еще до того, как вы достигнете своего критического блока кода.
assert (mode >= 0 && mode < 2); // Ensures that `mode` is between 0 and 1.
// Switch statement to follow
Я бы не стал поощрять использование этого здесь. Ваш код не будет хорошо читаться, и если вы не включите утверждения с флагом -ea
, ваше утверждение не будет работать.
Вместо этого вы можете сделать исключение какого-либо исключения - если оно не равно 0 или 1, то mode
является незаконным значением, которое невозможно обработать, что приводит к исключительной /undefined поведению. Выбросьте какое-то исключение.
switch(mode) {
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
throw new IllegalArgumentException("Mode is illegal");
}
Ответ 2
assert object != null;
object.doSomething();
assert
используется для проверки правильности некоторого предусловия, инварианта или постусловия. В этом примере мы хотим убедиться, что object
не null
, когда на него вызывается какой-либо метод.
Следует помнить, что assert
никогда не должно выполняться в производственном коде. Мы используем его только при тестировании. Существует опция Java, чтобы включить или выключить ее.
Что касается вашего конкретного примера, вы можете использовать:
assert mode == 0;
assert mode == 1;
в самом начале блока коммутатора, чтобы убедиться, что переданы только 0
и 1
.
P.S. Обсуждение когда использовать утверждение против исключения может помочь вам понять. Идея состоит в том, что
Исключения определяют надежность вашего приложения во время утверждений обратитесь к правильности вашего приложения.
Ответ 3
Утверждения в основном используются для проверки того, что никогда не должно происходить.
В некоторых утверждениях используются случаи из http://www.javapractices.com/topic/TopicAction.do?Id=102
предварительные условия (только в частных методах) - требования, которые метод требует, чтобы вызывающий пользователь выполнял.
post-conditions - проверить promises, сделанный методом его вызывающей стороне
инварианты класса - проверка состояния объекта
unreachable-at-runtime code - части вашей программы, которые вы ожидаете быть недоступными, но которые не могут быть проверены как таковые во время компиляции (часто бывают предложения и случаи по умолчанию в операторах switch)
Таким образом, использование утверждения в вашем коде неверно