当你编写方法时,你几乎总是要检查必须有效的东西。
假设如果方法的price参数无效,则需要抛出IllegalArgumentException
。因为我想将我的程序分成小块,所以我为它制作了一个私有方法。但是,最好的做法是创建一个名为validatePrize
的方法并返回一个布尔值,然后我在if语句中检查我调用validatePrize
方法,然后抛出IllegalArgumentException?
或者该方法不返回任何内容并抛出异常更好吗?
答案 0 :(得分:2)
我想说的答案主要是基于偏好。如果你想要一个可重用的函数,它在调用时不会抛出异常,那么选择带有布尔返回值的validatePrize。如果您只是用它来检查异常,那么使用引发异常的validatePrize。在这种情况下,我会说抛出异常的validatePrize会更合适,因为它可以用于从类本身外部进行异常处理。
答案 1 :(得分:1)
这完全取决于。
首先,validatePrize
听起来不像布尔方法,所以IMO不应该返回任何内容。
如果您有一堆保护条款,请抛出异常。如果您需要在应用程序中针对相同的属性集合进行验证,请将其设置为方法 - 但该方法也可以用作警卫的一部分。
答案 2 :(得分:0)
由于您已经知道负值是无效参数,因此您可以通过执行以下操作来防范它:
if(val < 0)
{
return false;
}
我在书中读到,防范这种情况是最好的方法。它不符合或不符合“例外标准”。所以是的,我只会返回一个布尔值。
有些人喜欢抛出异常,但这取决于你。
答案 3 :(得分:0)
如果你将检查委托给方法,你也可以直接从该方法抛出异常,以避免构造函数中的混乱代码。这是番石榴Preconditions
使用的典型方法:
this.value = Preconditions.checkNotNull(value, "value must not be null");
如果参数为null,则该行将抛出NullPointerException及其相关消息。如果参数不为null,则返回允许检查并在一行中分配参数的参数。
如果您有兴趣,这就是code looks like:
public static <T> T checkNotNull(T reference, Object errorMessage) {
if (reference == null) {
throw new NullPointerException(String.valueOf(errorMessage));
}
return reference;
}
您可以对您的用例使用类似的方法。
答案 4 :(得分:0)
我自己对此的看法是,只有在意外中出现异常时才会抛出异常。空指针可以是此,或ID的负数(应始终为正数)。基本上,异常用于显示程序内部的问题。如果您只是验证用户的输入,请使用布尔值和测试。