java 异常 经验 unknown_关于异常:是否有返回true,false或unknown的Java约定?

我正在写一个方法,如果某些事情是真的或不是真的,它将返回。但是,如果测试条件所需的资源不可用,它将无法返回true或false。

早些时候,我只是把它变成一个返回boolean的方法。但是现在,为了适应异常,我考虑在函数参数中传递true或false,并使用返回值作为测试的成功或失败指示器。

这是在Java中正确而常见的方式吗?或者Java中还有其他的东西来实现这个目标吗?

你能提供更多的背景吗?现在看来,您希望布尔返回值带有选中或未选中的异常…但很难确定。

如果返回"真"或"假",并在失败时引发异常,这有什么问题?

倒置:如何不这样做:dailywtf.com/articles/what_is_Truth_x3f_uux

如果你的意思是"在函数参数中传递真/假",就不能通过Java中的EDCOX1 0引用来传递引用。"你能得到的最接近的就是传递一些可变对象,并修改它。

如果资源不可用,则方法应返回布尔值并引发异常。

这是正确的,前提是不可用的资源是一个例外情况。如果它是正常和预期的状态,则异常是不适当的。

如果这个方法不能计算出正确的答案,我肯定会让它抛出一个异常。

现在您必须决定是否选中或取消选中引发的异常。这真的取决于上下文。通常,我这样认为:如果调用者有办法确保方法不会失败,我会让它抛出一个未检查的异常;否则,如果调用者没有办法绝对地确保方法不会失败,那么我会让它成为一个检查过的异常。

在这种情况下,调用者可以确定故障的可能性:

class C1 {

public boolean canCalculateResultNow() { ... }

public boolean calculateResult() {

if (cannot get resource) throw new IllegalStateException("Cannot get resource");

...

}

}

现在,如果调用者不能确定该方法是否能够正常完成,我将执行以下操作:

class CannotCalculateResultException extends Exception { ... }

class C2 {

public boolean calculateResult() throws CannotCalculateResultException {

if (cannot calculate result) throw new CannotCalculateResultException();

...

}

}

另一种可能是让方法返回boolean,这是boolean的一个可以为空的版本,我非常不喜欢也非常不鼓励。boolean可以是true、false或null。然后,如果资源不可用,您可以使方法返回null。

我在这种方法中看到的主要问题是,null的含义可能不清楚。调用代码总是必须检查结果是否为空,开发人员(甚至在编写此代码几个月后自己)必须阅读该方法的文档以了解空结果意味着什么。一个特定的检查异常明确地表明,有些事情可能会出错,哪些事情可能会出错。此外,它还将迫使开发人员为出现问题的情况做准备。在有未经检查的异常的方法中,方法canCalculateResult()的存在也会向使用该类的开发人员表明,在不需要阅读文档的情况下,某些事情可能会出错,并且可以合理地假定,在不首先调用canCalculateResult()的情况下调用calculareResult()是"危险的"。

我建议其他方法:有资源时不返回boolean,有资源时返回boolean,没有资源时返回null。

这是正确的,但不是一个好的做法。相反,您的方法应该返回一个布尔值并处理异常(如果无法计算答案的话)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
帮我把下列代码的case后内容和 “nStepMode =” 后的内容进行调换 switch (nThirdStepMode) { case PM_UNKNOWN_MODE: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_REST: { nStepMode = WORK_HOLD; } break; case PM_STEP_RANDOM_REST: { nStepMode = WORK_HOLD_RANDOM; } break; case PM_STEP_SYN_SUSPEND: { // 无法识别的第三方工步号 return false; } break; case PM_STEP_PAUSE: { nStepMode = WORK_PAUSE; } break; case PM_STEP_STOP_X: { // 无法识别的第三方工步号 return false; } break; case PM_CONST_POWER_CHARGE: { nStepMode = WORK_CP; } break; case PM_CONST_POWER_DISCHARGE: { nStepMode = WORK_DP; } break; case PM_CONST_RESISTANCE_CHARGE: { nStepMode = WORK_CR; } break; case PM_CONST_RESISTANCE_DISCHARGE: { nStepMode = WORK_DR; } break; case PM_STEP_INCUBATOR_LINK: { // TODO:处理 温箱联动 return false; } break; case PM_CONST_CURRENT_CHARGE: { nStepMode = WORK_CC; } break; case PM_CONST_CURRENT_DISCHARGE: { nStepMode = WORK_DC; } break; case PM_STEP_C_RATE_CHARGE: { nStepMode = WORK_CRATE; } break; case PM_STEP_C_RATE_DISCHARGE: { nStepMode = WORK_DRATE; } break; case PM_STEP_CCCV_CHARGE: // carefully! { nStepMode = WORK_CCCV; } break; case PM_STEP_CCCV_DISCHARGE: // carefully! { nStepMode = WORK_DCDV; } break; case PM_CONST_VOLT_CHARGE: { nStepMode = WORK_CV; } break; case PM_CONST_VOLT_DISCHARGE: // support lmtPara from V7206 { nStepMode = WORK_DV; } break; case PM_STEP_RATE_CV_CHARGE: { nStepMode = WORK_CRATECV; } break; case PM_STEP_RATE_CV_DISCHARGE: { nStepMode = WORK_DRATEDV; } break; case PM_STEP_CPCV_CHARGE: { nStepMode = WORK_CPCV; } break; case PM_STEP_CPCV_DISCHARGE: { nStepMode = WORK_DPDV; } break; case PM_STEP_LOOP: { nStepMode = WORK_WHILE; } break; default: { // 无法识别的第三方工步号 return false; } break; }
最新发布
05-29

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值