我正在写一个方法,如果某些事情是真的或不是真的,它将返回。但是,如果测试条件所需的资源不可用,它将无法返回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。
这是正确的,但不是一个好的做法。相反,您的方法应该返回一个布尔值并处理异常(如果无法计算答案的话)。