бросить исключение только в режиме отладки в Java - PullRequest
3 голосов
/ 23 февраля 2012

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

Проблема в том, что если я сделаю что-то вроде:

if (DEBUG_MODE) бросить e;

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

Какой лучший способ справиться с этим?

EDIT

PS

Мой вопрос не был ясен, извините.

В моем случае утверждение не очень удобно. Проблема в том, что я уже знаю, что что-то не так, поэтому мне нечего утверждать. Чтобы было понятнее, у меня есть неожиданные исключения. Конечно, вы можете сказать: напишите код, чтобы не было неожиданных исключений. Но если что-то не так, я не хочу, чтобы приложение зависало. Теперь я добавил такую ​​функцию:

public static void unexpectedException(String string, Exception e) {
    if (Build.DEBUG) {
        MyApp.errorLog(string);
        throw new RuntimeException(e);
    } else
        MyApp.errorLog(string, e);
}

Хотя все ваши ответы были правильными, я выберу тот, который ближе к тому, что я сделал

PS2

Другой случай, когда утверждение не очень удобно, - это когда вы реализуете шаблонное состояние. Если для какого-то состояния вы ожидаете, что метод никогда не будет вызван ...

Ответы [ 5 ]

4 голосов
/ 23 февраля 2012

Если вы не хотите использовать утверждения, как вы действительно должны, вы можете получить свои исключения из RuntimeException. Тогда вам не нужно объявлять их как throws в заголовке вашего метода.

При этом вы должны действительно взглянуть на утверждения или, как уже говорилось в других ответах, правильную структуру ведения журналов.

4 голосов
/ 23 февраля 2012

Вы можете использовать утверждения.

public void methodSomething(Object o){

   assert (o != null);  // will throw AssertionError during development

   ...

}

Но вы действительно должны ловить эти исключения и обрабатывать их (:

3 голосов
/ 23 февраля 2012

Не КОГДА-ЛИБО не делайте этого!
Исключение должно последовательно обрабатываться в вашем приложении.Используйте механизм ведения журнала, чтобы отслеживать поведение вашей системы, не создавая исключение до уровня интерфейса приложения.

2 голосов
/ 23 февраля 2012

Я бы предложил шаблон вместе с некоторым механизмом . В основном создайте что-то вроде ErrorHandler:

public interface ErrorHandler {
    void handleError(Throwable t);
}

и предоставляют несколько реализаций: NoOpErrorHandler, RethrowingErrorHandler и LoggingErrorHandler. В зависимости от окружающей среды используйте тот, который подходит вам больше всего.

Однако, пожалуйста хотя бы зарегистрируйте исключения!

0 голосов
/ 23 февраля 2012

Вы можете регистрировать исключения, подобные этому

if(LOGGER.isDebugEnabled())
    LOGGER.log(Level.DEBUG, "What went wrong", e);

Это позволяет вам включать эти сообщения в dev и выключать их в работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...