Is there a Java convention for returning true, false, or unknown?
我正在写一个方法,如果某些事情是真的或不是真的,它将返回。但是,如果测试条件所需的资源不可用,它将无法返回true或false。
早些时候,我只是把它变成一个返回
这是在Java中正确而常见的方式吗?或者Java中还有其他的东西来实现这个目标吗?
如果资源不可用,则方法应返回布尔值并引发异常。
如果这个方法不能计算出正确的答案,我肯定会让它抛出一个异常。
现在您必须决定是否选中或取消选中引发的异常。这真的取决于上下文。通常,我这样认为:如果调用者有办法确保方法不会失败,我会让它抛出一个未检查的异常;否则,如果调用者没有办法绝对地确保方法不会失败,那么我会让它成为一个检查过的异常。
在这种情况下,调用者可以确定故障的可能性:
1 2 3 4 5 6 7 | class C1 { public boolean canCalculateResultNow() { ... } public boolean calculateResult() { if (cannot get resource) throw new IllegalStateException("Cannot get resource"); ... } } |
现在,如果调用者不能确定该方法是否能够正常完成,我将执行以下操作:
1 2 3 4 5 6 7 | class CannotCalculateResultException extends Exception { ... } class C2 { public boolean calculateResult() throws CannotCalculateResultException { if (cannot calculate result) throw new CannotCalculateResultException(); ... } } |
另一种可能是让方法返回
我在这种方法中看到的主要问题是,
我建议其他方法:有资源时不返回
这是正确的,但不是一个好的做法。相反,您的方法应该返回一个布尔值并处理异常(如果无法计算答案的话)。