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

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


public class PackageFailedException extends Exception {

    public PackageFailedException(String msg) {

        super(msg)

    }

}

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


提前致谢!


动漫人物
浏览 172回答 3
3回答

慕田峪9158850

您可以简单地将标志添加到您的异常中。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();}

慕田峪4524236

您有条件地创建异常,因此只有在适当的时候才会抛出它。要么和/或您根据捕获时的条件以不同的方式处理异常。你不做的是让异常决定它是否应该存在,那就是疯狂。

ABOUTYOU

您可以继承您的 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());    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java