【发布时间】:2017-04-11 17:57:56
【问题描述】:
与以下对话有关 -
第二个链接建议了一些避免!= null 语句的方法。
- 使用
assert是一个。 - 使用NullObjectPattern - 不是一个选项,因为每个交易者都不负责生产代码。
第一个链接只是建议!= null 想法。
Object class 有 requiresNonNull 方法抛出 NullPointerException 如果使用该对象无论如何都会抛出。 assert 也提出了同样的方法。如果我能处理所有异常,那么代码会因为太多的尝试和捕获而变得丑陋。
使用!= null 在面向对象的意义上不是很漂亮。
我认为Object.isNull 和Object.isNotNull 是让代码看起来简洁整洁的方法,同时也能很好地处理这种情况(我的意思是没有冗长的try...catch 语句)。我可以很容易地在任何条件语句中使用它们。这比原始的!= null 要好得多。
但是,为什么没有这样的方法呢?传递 null 是个坏主意吗?如果是,那么如果 null 是有效响应而不是 != null,我们该怎么办?
编辑:
将问题从:
为什么Java中没有boolean Object.isNull(Object object)静态实用方法?到Java中有boolean Object.isNull(Object object)或类似的静态实用方法吗?
【问题讨论】:
-
我不明白使用
obj == null和obj != null有什么问题。Objects.isNull和Objects.nonNull在内部都使用return obj == null和return obj != null。 -
在许多情况下,代码
if (x != null)本身并没有错。您应该更深入地阅读第二个链接,因为(在我看来)重点在于您不应该以填充强制客户端代码的方式从您自己的代码中返回nullwilly-nilly过度防御。添加Objects.isNull的冗长实际上只有在使用流或其他使用方法引用的上下文时才有价值。在任何情况下都盲目地应用“== null 是糟糕的代码”之类的语句是愚蠢的。 -
(a) 您似乎混淆了
Object和Objects。 (b) 在 Java 8 中,有Objects.isNull和Objects.nonNull。 -
另外,你不应该使用
try-catch来检查空值。obj != null是检查对象是否为null的正确方法,使用try-catch进行空检查只是糟糕的设计。 -
@TarunMaganti 对我来说,假设您在使用它时知道自己在做什么 是微不足道的——什么时候不应该这样做。我不会告诉木匠不要使用锤子,因为他会伤到他的拇指……
标签: java nullpointerexception null nullable