Как я могу добавить условие в пользовательском классе исключений в Java - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть класс, в котором в нескольких местах я вызываю пользовательский класс для обработки исключений.

public class PackageFailedException extends Exception {
    public PackageFailedException(String msg) {
        super(msg)
    }
}

Мне нужно добавить условие, если переменная равна true, тогда игнорировать исключение.Есть ли способ сделать это в одном месте?например в моем пользовательском классе?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

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

Либо это, и / или вы обрабатываете исключение по-разному в зависимости от условий, когда оно перехвачено.

ЧтоВы не должны делать, чтобы исключение решило, должно ли оно существовать или нет, таким образом, лежит ложь.

0 голосов
/ 11 февраля 2019

Вы можете унаследовать ваше PackageFailedException, чтобы создать такую ​​логику:

public class IgnorablePackageFailedException extends PackageFailedException {

    public IgnorablePackageFailedException(final String msg) {
        super(msg);
    }
}

Затем в вашем коде вы можете сгенерировать PackageFailedException или IgnorablePackageFailedException.Например:

public static void method1() throws PackageFailedException {
    throw new PackageFailedException("This exception must be handled");
}

public static void method2() throws PackageFailedException {
    throw new IgnorablePackageFailedException("This exception can be ignored");
}

Итак, вы можете обрабатывать исключения следующим образом:

public static void main(final String[] args) {
    try {
        method1();
    } catch (final PackageFailedException exception) {
        System.err.println(exception.getMessage());
    }

    try {
        method2();
    } catch (final IgnorablePackageFailedException exception) {
        System.out.println(exception.getMessage()); // Ignorable
    } catch (final PackageFailedException exception) {
        System.err.println(exception.getMessage());
    }
}
0 голосов
/ 11 февраля 2019

Вы можете просто добавить флаг в свое исключение.

public class PackageFailedException extends Exception {

    private final boolean minorProblem;

    public PackageFailedException(String msg, boolean minorProblem) {
        super(msg);
        this.minorProblem = minorProblem;
    }

    public boolean isFlag() {
       return this.flag;
    }
}

Тогда вы можете просто позвонить isMinorProblem() и решить, игнорировать ли это.Здесь предполагается, что вы можете передать его, когда он выбрасывается.

Если флаг указывает на существенно другую ситуацию с ошибкой, вы можете вместо этого рассмотреть другой класс Exception , возможно расширение PackageFailedException, если это более специализированный случай.

 public class MinorPackageFailedException extends PackageFailedException {

     public MinorPackageFailedException(String msg) {
       super(msg);
     }
 }

Тогда в вашем коде:

try {
  try {
    doThePackageThing();
  } catch (MinorPackageFailedException ex) {
    //todo: you might want to log it somewhere, but we can continue 
  }

  continueWithTheRestOfTheStuff();

} catch (PackageFailedException ex) {
  //todo: this is more serious, we skip the continueWithTheRestOfTheStuff();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...