java - 自定义异常(例如 IllegalArgumentException)以获得良好的日志信息

标签 java android null nullpointerexception nullreferenceexception

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

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

我认为这样我总能看到这种非法参数异常和其他运行时异常之间的区别。

这个主意好不好?

PS:我看过这样的帖子 Avoiding != null statements

**更新:**所以我会知道这是程序员故意的异常,并且我将有清晰的日志。

最佳答案

IllegalArgumentException 是标准异常,而不是自定义异常。当参数为 null 时,通常会抛出 NullPointerException,而实际上本不应该是这样。

当标准异常适合您的特殊情况时,您通常应该更喜欢它们。另请参阅“Effective Java 第 2 版”中的第 60 条(“支持使用标准异常”)。这样做的优点之一是,您可以为您自己的代码和您使用的库中可能发生的类似情况编写一个处理程序。

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

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

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

关于java - 自定义异常(例如 IllegalArgumentException)以获得良好的日志信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152698/

相关文章:

java - 分布式树数据结构

java - 使用 Selenium 和 Java 在 TestNG 中重置浏览器状态的最佳方法

android - 我怎样才能改变我的安卓应用程序的图标

Java邮件在公司网络中无法使用

java - StringBuilder的deleteCharAt()函数 "String index out of range : 6 "

android - 改造是否对被破坏的 fragment 提出请求?

java - 图像不会保留在我的数据库中

language-agnostic - 默认情况下,面向对象编程语言中的引用应该是不可空的吗?

java - 为什么我的 Spring @Autowired 字段为空?

javascript - 如果外部文件不存在,文件将停止 : is possible to solve this?