【问题标题】:Is there a `boolean Object.isNull(Object object)` or something similar static utility method in Java?Java中是否有`boolean Object.isNull(Object object)`或类似的静态实用程序方法?
【发布时间】:2017-04-11 17:57:56
【问题描述】:

与以下对话有关 -

第二个链接建议了一些避免!= null 语句的方法。

  1. 使用assert 是一个。
  2. 使用NullObjectPattern - 不是一个选项,因为每个交易者都不负责生产代码。

第一个链接只是建议!= null 想法。

Object classrequiresNonNull 方法抛出 NullPointerException 如果使用该对象无论如何都会抛出。 assert 也提出了同样的方法。如果我能处理所有异常,那么代码会因为太多的尝试和捕获而变得丑陋。

使用!= null 在面向对象的意义上不是很漂亮。

我认为Object.isNullObject.isNotNull 是让代码看起来简洁整洁的方法,同时也能很好地处理这种情况(我的意思是没有冗长的try...catch 语句)。我可以很容易地在任何条件语句中使用它们。这比原始的!= null 要好得多。

但是,为什么没有这样的方法呢?传递 null 是个坏主意吗?如果是,那么如果 null 是有效响应而不是 != null,我们该怎么办?

编辑:

将问题从: 为什么Java中没有boolean Object.isNull(Object object)静态实用方法?Java中有boolean Object.isNull(Object object)或类似的静态实用方法吗?

【问题讨论】:

  • 我不明白使用obj == nullobj != null 有什么问题。 Objects.isNullObjects.nonNull 在内部都使用 return obj == nullreturn obj != null
  • 在许多情况下,代码 if (x != null) 本身并没有错。您应该更深入地阅读第二个链接,因为(在我看来)重点在于您不应该以填充强制客户端代码的方式从您自己的代码中返回null willy-nilly过度防御。添加Objects.isNull 的冗长实际上只有在使用流或其他使用方法引用的上下文时才有价值。在任何情况下都盲目地应用“== null 是糟糕的代码”之类的语句是愚蠢的。
  • (a) 您似乎混淆了ObjectObjects。 (b) 在 Java 8 中,有Objects.isNullObjects.nonNull
  • 另外,你不应该使用try-catch 来检查空值。 obj != null 是检查对象是否为null 的正确方法,使用try-catch 进行空检查只是糟糕的设计。
  • @TarunMaganti 对我​​来说,假设您在使用它时知道自己在做什么 是微不足道的——什么时候不应该这样做。我不会告诉木匠不要使用锤子,因为他会伤到他的拇指……

标签: java nullpointerexception null nullable


【解决方案1】:

https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html:

static boolean isNull(Object obj) 如果提供的引用为 null,则返回 true,否则返回 false。

static boolean nonNull(Object obj) 如果提供的引用不为 null,则返回 true,否则返回 false。

不过从 1.8 开始...

【讨论】:

  • @BackSlash 它们可以用作流的方法引用。代码看起来更干净...someList.stream().filter(Objects::nonNull).forEach(...)
  • @MikhailAntonov 这正是它只出现在 Java 8 中的原因。在方法引用系统之前它是无用的
  • @MikhailAntonov 在这种特殊情况下,这是有道理的!但是 OP 没有在问题中具体说明这一点,他一般谈到“检查面向对象语言中的空值”,并且正如 OP 所说“使用 != null 在面向对象的意义上不是很漂亮”。 - 这对我来说似乎是一个完全荒谬的观点。
  • @TarunMaganti 是否使用 Null 检查可能有很多原因。其中一些很好,另一些不太好。它是那些“没有黑色或白色”的东西之一。在某些用例中,只使用 null 并检查它可能是合理的,而在其他情况下,您肯定希望避免这种情况。没有“它总是坏”或“总是好”。说到 null-Reference 本身就是另一回事了。在某种程度上,你总是必须有一个“未初始化”的概念——并检查它。霍尔只是后悔选择了他们的方式。
  • 此外,如果在没有-ea 标志的情况下运行,jvm 可能会忽略断言
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2021-06-28
  • 2012-09-04
  • 1970-01-01
相关资源
最近更新 更多