утверждение в коде Java

#java #debugging #assert

#java #отладка #утверждение

Вопрос:

Я хочу добавить сообщение отладки в код Java. Я хотел бы изменить утверждение с помощью современного подхода

 public void registerForRead(SSLChannel l) {
  debug("Error");
  boolean wasNotPresent = readListeners.add(l);
  assert wasNotPresent : "Already registered";
}
  

Если я изменю код таким образом, сохраню ли я логику?

 public void registerForRead(SSLChannel l) {
  debug("Error");
  boolean wasNotPresent = readListeners.add(l);
  if (wasNotPresent) {
    debug("Already registered");
  }
}
  

Комментарии:

1. «измените утверждение на современный подход» — в этом нет ничего современного. Утверждения никогда не должны и никогда не должны заменять ведение журнала и наоборот.

2. Лучше перейти ко вторым решениям, утверждения assert могут быть отключены аргументами JVM, поэтому вы не можете ретранслировать их. Используйте ведение журнала для записи файлов журналов (всегда!), Используйте операторы if для выполнения логики программирования и используйте отладчик для отладки.

Ответ №1:

оператор assert утверждает, что определенные ожидания всегда выполняются, что приводит к конфликту AssertionError

Итак, очевидно, что ведение журнала здесь не является заменой

Комментарии:

1. Можете ли вы порекомендовать мне какой-нибудь лучший подход для отладки логики?

2. вы можете добавить оператор отладки, но утверждение все равно должно сохраняться, если оно закодировано для защиты выполненного ожидания во время выполнения

3. @PeterPenzov Предполагая, что вы используете IDE для своей работы (например, NetBeans, eclipse), я бы познакомился с отладчиком…

Ответ №2:

С информацией в вопросе я могу дать только несколько рекомендаций по улучшению вашего ведения журнала:

  • Debug («Ошибка»); не очень полезно вообще. Вы хотите иметь возможность активировать уровень отладки и получать четкое сообщение о том, что, когда неправильно и где.

  • Утверждения работают только в том случае, если вы запускаете виртуальную машину с аргументом -ea . (Включить утверждения). В рабочей среде вы не хотите аварийно завершать работу приложения только для проверки на всякий случай. В разработке вы хотите знать о странных вещах, которые не должны происходить.

  • Что-то не так, но я не понимаю, почему и какого-либо исключения. Убедитесь, что вы не изобретаете механизм обработки ошибок. Для этого предназначены исключения.

  • Иногда использование старого System.out.println или эквивалента ведения журнала может быть приемлемым для разработки. Однако, если вы обнаружите, что делаете это очень часто, это признак проблем с разработкой (также известный как неприятный запах): используйте хорошие трассировки ведения журнала, унитарные тесты и т. Д.