像IllegalArgumentException这样的自定义异常可以获得很好的日志信息

时间:2012-02-05 20:25:51

标签: java android null nullpointerexception nullreferenceexception

有一个像IllegalArgumentException这样的自定义异常并且在方法可以获取空引用而不是有效对象值的所有情况下抛出它是否是个好主意?

 public void method(String str){
        if(str == null)throw new CustomIllegalArgumentException("str cannot be null");
    }

我认为这样我总能看到这些非法参数异常与其他RuntimeExceptions之间的区别。

这是否好主意?

P.S。:我看过像这样的帖子 Avoiding != null statements

**更新:**所以我知道这是程序员预期的异常,我会有明确的日志。

1 个答案:

答案 0 :(得分:4)

IllegalArgumentException是标准,而不是自定义异常。如果参数为NullPointerException则不应该抛出null

在适合您的特殊情况时,您通常应该更喜欢标准例外。另请参阅“Effective Java 2nd edition”(“赞成使用标准例外”)中的第60项。这样做的一个优点是,您可以为类似的条件编写单个处理程序,这些条件可能出现在您自己的代码和您使用的库中。

为了区分异常,您应该使用它们携带的字符串消息。此外,堆栈跟踪将指示是从您自己的代码还是从其他代码抛出异常。不需要额外的异常类。

创建自己的异常类可能是合理的一种情况是,当您需要异常来携带有关其指示的异常条件的额外信息时。在这种情况下,您仍应从适当的标准类派生异常,以便可以编写单个处理程序来处理来自您自己的代码和您使用的库的类似条件的异常。

另请参阅Google的Preconditons实用程序类。特别是checkNotNull()实用程序方法,当其参数为NullPointerException时也会抛出null