2 回答

TA贡献1863条经验 获得超2个赞
你的Exception类可能接受一个功能接口。
public class OutOfFuelException extends Exception {
public OutOfFuelException(final Supplier<String> valueSupplier) {
super(valueSupplier.get());
}
...
}
在这种情况下,您可以将不接受参数但返回String值的方法引用或适当的lambda表达式传递给构造函数。
public void myMethod() throws OutOfFuelException {
...
if (miles > getRange()) {
throw new TestException(this::buildValue);
}
}
public String buildValue() {
return "My value";
}
根据您的需要进行调整,但请不要那样做。

TA贡献2037条经验 获得超6个赞
让我们保持简单:您需要做的就是将 Exception 构造函数的 double 参数传递给超级构造函数的参数,就是这样。
异常不应真正保持状态,而主要用于在需要时传达错误。所以 fulelNeeded 应该被传递到 super 的构造函数中,这样 stacktrace 就会显示这个值。例如:
super("You need fuel: " + fuelNeeded);
整个事情比你如何接线简单:
public class OutOfFuelException extends Exception {
public OutOfFuelException (double fuelNeeded) {
super("Fuel shortfall: " + fuelNeeded);
}
}
所以这应该工作:
if (miles > getRange()) {
fuel = 0;
throw new OutOfFuelException(getShortfall());
}
或者更简单地说:
if (miles > getRange()) {
fuel = 0;
throw new OutOfFuelException(miles - getRange());
}
添加回答
举报