返回值与返回值的方法

时间:2012-10-27 23:04:54

标签: java

当你编写方法时,你几乎总是要检查必须有效的东西。

假设如果方法的price参数无效,则需要抛出IllegalArgumentException。因为我想将我的程序分成小块,所以我为它制作了一个私有方法。但是,最好的做法是创建一个名为validatePrize的方法并返回一个布尔值,然后我在if语句中检查我调用validatePrize方法,然后抛出IllegalArgumentException?

或者该方法不返回任何内容并抛出异常更好吗?

5 个答案:

答案 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的负数(应始终为正数)。基本上,异常用于显示程序内部的问题。如果您只是验证用户的输入,请使用布尔值和测试。