如何将异常类中的方法传递给异常构造函数?

我写了一个类,它应该模拟汽车和燃油系统,一旦汽车驶过一定距离,我试图抛出“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());

        }


杨魅力
浏览 161回答 2
2回答

小唯快跑啊

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

阿晨1998

让我们保持简单:您需要做的就是将 Exception 构造函数的 double 参数传递给超级构造函数的参数,就是这样。异常不应真正保持状态,而主要用于在需要时传达错误。所以 fulelNeeded 应该被传递到 super 的构造函数中,这样 stacktrace 就会显示这个值。例如:super("You need fuel: " + fuelNeeded);整个事情比你如何接线简单:public class OutOfFuelException extends Exception {&nbsp; &nbsp; public OutOfFuelException (double fuelNeeded) {&nbsp; &nbsp; &nbsp; &nbsp; super("Fuel shortfall: " + fuelNeeded);&nbsp; &nbsp; }}所以这应该工作:if (miles > getRange()) {&nbsp; &nbsp; fuel = 0;&nbsp; &nbsp; throw new OutOfFuelException(getShortfall());}或者更简单地说:if (miles > getRange()) {&nbsp; &nbsp; fuel = 0;&nbsp; &nbsp; throw new OutOfFuelException(miles - getRange());}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java