java是否可以尝试/捕获一些东西来检查是否抛出了异常?
仅仅为了查看此代码是否引发了特定的异常而尝试一些无用的东西,这是一种好方法吗
我想在抛出异常时做一些事情,而不是做其他事情
try {
new BigDecimal("some string"); // This do nothing because the instance is ignored
} catch (NumberFormatException e) {
return false; // OK, the string wasn't a well-formed decimal
}
return true;
有太多的先决条件需要测试,构造函数BigDecimal()总是检查它们,所以这似乎是最简单的方法
# 1 楼答案
是的,这当然与实用主义程序员的“例外情况下的例外”的概念相矛盾,但是你知道你在做什么,所以在我看来没有问题
# 2 楼答案
这样做没有错;毕竟,某种其他语言的支持者喜欢说“道歉比请求许可更容易”,也就是说,等待失败并加以处理比完全避免失败更容易。在这种情况下,既然没有其他选择,那就绝对去做吧
# 3 楼答案
如果您不喜欢这种方法,请尝试使用来自Apache Commons Validator的^{} 。{cd3}在{cd3}的情况下返回无效的输入
# 4 楼答案
有两种已知的方法可以“检查”前提条件
伊丽尔:三思而后行
这种编码风格在调用或查找之前显式地测试前置条件。这种风格与EAFP方法形成对比,其特点是存在许多if语句
EAFP:请求原谅比允许更容易
这种常见的编码风格假设存在有效的键或属性,如果假设被证明为错误,则捕获异常。这种简洁快速的风格的特点是有许多尝试和例外的陈述。这种技术与许多其他语言(如C语言)所共有的LBYL风格形成对比
对于具有duck类型的语言,EAFP总是一个好主意
这显然取决于你想做什么。。。若不确定要操作的对象的类型,请使用EAFP
# 5 楼答案
一般来说,应避免这种做法。但是,由于没有实用方法
isValidBigDecimal(..)
,这是一条路要走正如Peter Tillemans在评论中指出的,将此代码放在名为
isValidBigDecimal(..)
的实用方法中。因此,您的代码将不知道确定有效性的方法,您甚至可以稍后切换到另一种方法Boris Pavlović建议使用第三方库(commons lang)来检查这一点。还有一个更有用的方法,每当我需要验证数字时,我都会使用它-
NumberUtils.isNumber(..)
# 6 楼答案
性能可能不是很好,语法也不是很详细,但是代码对它的功能非常精确。检查和使用之间没有重复,这一直是一个大问题
(注意,这种特殊类型的字符串转换实际上是为了调试和内部配置。它不处理区域设置和其他面向人的考虑。在文件格式和有线协议中使用会对类使用的表示形式产生强烈的依赖性。)