我编写了一个用于模拟汽车和燃油系统的类,一旦汽车驶过一定距离,我将尝试抛出“OutOfFuelException”,为此,我想从OutOfFuelException中传递一个方法类到构造函数调用中,但是我不确定如何在不实际创建类实例的情况下执行此操作。
这是异常类的代码:
public class OutOfFuelException extends Exception {
private double fuelNeeded;
public OutOfFuelException (double fuelNeeded) {
super("You need fuel!");
this.fuelNeeded = fuelNeeded;
}
public double getShortfall() {
return fuelNeeded;
}
}
这是使用方法调用的尝试:
if (miles > getRange()) {
fuel = 0;
throw new OutOfFuelException(getShortfall());
}
最佳答案
您的Exception
类可能接受一个Functional接口(interface)。
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";
}
根据您的需求进行调整,但是请不要那样做。