这个验证是否对象传递null是否正常或我应该使用一种equals()方法?
public void addCard(Card card) throws IllegalArgumentException {
if (card != null){
cardList.add(card);
} else {
throw new IllegalArgumentException();
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 21
这是正确的,但就我个人而言,我会以相反的方式构建它.在方法开始时验证参数是很常见的,然后在知道它们正确的方法的其余部分使用它们:
public void addCard(Card card) {
if (card == null) {
throw new IllegalArgumentException("Attempt to add null card");
}
cardList.add(card);
}
Run Code Online (Sandbox Code Playgroud)
预先进行所有参数测试的好处是,如果向您传递了无效参数,您将在发生任何副作用之前抛出异常 - 而不是通过该方法的一半,这可能会留下对象处于无效状态.当然在这种情况下没关系,但我赞成这里的一致性:)
请注意,不需要声明IllegalArgumentException- 它是子类RuntimeException,这意味着它未被选中(您不需要声明它).
Tof*_*eer 17
我喜欢这样做:
/**
* Adds a card to the deck.
*
* @param the card to add.
* @throws IllegalArgumentException if the card is null.
*/
public void addCard(final Card card)
{
if(card == null)
{
throw new IllegalArgumentException("card must not be null");
}
cardList.add(card);
}
Run Code Online (Sandbox Code Playgroud)
除此之外,在我看来,你做得对.
来自Josh Blosh的有效Java建议如下:
/**
* ads a card to card list.
*
* @param card card to add. Can not be null
*
*/
public void addCard(Card card) {
if (card == null) {
throw new NullPointerException("Card can not be null")
}
cardList.add(card);
}
Run Code Online (Sandbox Code Playgroud)
所以,首先你不要声明RuntimeException.其次,你抛出一个NullPointerException,因为你的参数不是简单的错误 - 它是null.第三,在javadoc中指定参数,它们是否为null.
你可以使用commons-lang Validate类.它使您的代码更短更简单:
public void addCard(Card card) {
Validate.notNull(card);
cardList.add(card);
}
Run Code Online (Sandbox Code Playgroud)
它将抛出IllegalArgumentException一个默认消息(如果你愿意,可以将自定义消息作为第二个参数传递)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |