我编写了一个用于模拟汽车和燃油系统的类,一旦汽车驶过一定距离,我将尝试抛出“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";
}

根据您的需求进行调整,但是请不要那样做。

07-24 13:18