3 回答
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();
}
TA贡献1875条经验 获得超5个赞
您有条件地创建异常,因此只有在适当的时候才会抛出它。
要么和/或您根据捕获时的条件以不同的方式处理异常。
你不做的是让异常决定它是否应该存在,那就是疯狂。
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());
}
}
添加回答
举报