如何在Java中的自定义异常类中添加条件

时间:2019-02-11 11:34:06

标签: java exception

我有一个类,可以在几个地方调用一个自定义类来处理异常。

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

如果变量为true,则需要添加条件,然后忽略该异常。 有没有办法在一个地方做到这一点? 例如在我的自定义课程中?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以简单地将标志添加到Exception中。

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();
}

答案 1 :(得分:0)

您有条件地创建了异常,因此只有在适当的时候和适当的时候才会抛出该异常。

或者和/或您根据捕获异常时的条件对异常进行不同的处理。

您不做的是让异常决定是否应该存在,这就是疯狂。

答案 2 :(得分:0)

您可以继承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());
    }
}