为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2022-06-23 16:28:46
我写了一个类,它应该模拟汽车和燃油系统,一旦汽车驶过一定距离,我试图抛出“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());        }
查看完整描述

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";

}

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


查看完整回答
反对 回复 2022-06-23
?
阿晨1998

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());

}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号