我有一个类,可以在几个地方调用一个自定义类来处理异常。
public class PackageFailedException extends Exception {
public PackageFailedException(String msg) {
super(msg)
}
}
如果变量为true,则需要添加条件,然后忽略该异常。 有没有办法在一个地方做到这一点? 例如在我的自定义课程中?
谢谢!
答案 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());
}
}