为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2022-06-15 15:57:42
我有一个类,我在几个地方调用一个自定义类来处理异常。public class PackageFailedException extends Exception {    public PackageFailedException(String msg) {        super(msg)    }}如果变量为真,我需要添加一个条件,然后忽略异常。有没有办法在一个地方做到这一点?例如在我的自定义类中?提前致谢!
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您可以简单地将标志添加到您的异常中。


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

}


查看完整回答
反对 回复 2022-06-15
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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

要么和/或您根据捕获时的条件以不同的方式处理异常。

你不做的是让异常决定它是否应该存在,那就是疯狂。


查看完整回答
反对 回复 2022-06-15
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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

    }

}


查看完整回答
反对 回复 2022-06-15
  • 3 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信