java是“断言错误”好的做法?
我目前正在编写一个函数,根据给定的条件从列表中返回一个对象。看起来是这样的:
for (Object object : list) {
if (condition(object)) {
return object;
}
}
这个函数应该总是从列表中返回一些东西,如果没有找到匹配的对象,这是一个错误的调用,一个严重的错误,程序应该停止
因此,在启用断言时,我在循环结束后做了以下工作:
assert false; // Will always trigger in debug mode.
return null; // No matter anyway, an AssertionException has already been thrown.
但我想知道我做得好不好
如果没有,我应该怎么做?我自己也有例外吗
无论如何,这种情况有什么规范吗
# 1 楼答案
断言或抛出异常的问题在于,您需要使用异常处理来处理并非真正例外的情况
此外,您无法真正确定是什么引发了您捕获的异常/断言。它可能被抛出到您期望的位置,但它也可能被抛出到过滤代码中,例如,因此检查异常以检测“未找到”情况可能会将其他问题与该情况混为一谈
另一种方法是使用^{} (对于Java 8之前的版本,Guava中也存在类似的类;或者您可以简单地使用
Set<Object>
,但这并不表示您希望找到0或1个值):现在,在调用代码中,您明确知道列表中可能找不到项:
而不是异常处理,您可能会忘记添加
# 2 楼答案
我宁愿在调用函数时检查其返回值
您也可以编写自己的异常类,并以任何方式处理它
我个人认为
assert false
不是好的做法编辑
如果是关于将被抛出的
AssertionException
,那么您也可以像这样使用它所以你可以用同样的方式处理