是否可以从此处的标头中删除“ throw IllegalArgumentException”?

时间:2019-03-30 22:30:33

标签: java illegalargumentexception

我想知道是否可以在此方法的标头中删除IllegalArgumentException,将其包含在方法的主体中,并且仍以相同的方式工作吗?

谢谢!

public Card(int value, String suit) throw IllegalArgumentException {
    LinkedList<String> suits = new LinkedList<>(Arrays.asList("spades", "hearts", "diamonds", "clubs"));//all suits in the lower case
    if(value >= 1 && value <= 13 && suits.contains(suit.toLowerCase())) {
        this.value = value;
        this.suit = suit;
    } else {
        throw new IllegalArgumentException("Illegal suit-value combination");//throw exception in case value or suit is wrong
    }
}

1 个答案:

答案 0 :(得分:2)

您不需要在方法声明中显式声明RuntimeException。由于IllegalArgumentExceptionRuntimeException,因此可以将其删除。

来自offical documentation

  

运行时异常可能在程序中的任何地方发生,在典型情况下,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不需要捕获或指定运行时异常(尽管可以)。

您可以在方法的JavaDoc部分中提到它。这为使用者提供了有关引发的任何未经检查的异常的提示。通常还会将此信息间接附加到参数中。

/**
  * @throws IllegalArgumentException if the suite combination is illegal
  */

/**
  * @param myParam the param, must not be null
  */

参数验证通常包括:如果一个参数不符合要求,则抛出IllegalArgumentException。由于这些列在JavaDoc中(此处为 not null ),如果程序员通过null,则是程序员的错。