【问题标题】:Is there an equal for the c# null coalescing operator in java?java中的c#空合并运算符是否有相等的?
【发布时间】:2014-03-10 07:28:50
【问题描述】:

我在 java 中搜索了一段时间 C# 'nullable' 的相等,发现最接近的方法之一是使用包装类;现在我想知道 java 中的 c# null 合并运算符 (??) 是否相等? (当然除了普通的 'if' 语句)

【问题讨论】:

  • 这真的很酷,我想要它,但遗憾的是,不,Java 中没有这样的东西。
  • 确实'null'在编程中很常见,java中有这么大的差距很奇怪。
  • @AymenDaoudi:正如我已经说过的,我要求使用 if 语句以外的其他方法。(毫无疑问,' ? : ' 运算符和 'if' 语句之间没有太大区别)
  • 我也希望 Java 有一个 ?。其中a?.foo() 仅调用foo() 并在a 不为null 时返回其返回值,否则仅返回null。对于字段访问也是如此:如果 a 为 null,a?.someField 将评估为 null。

标签: java nullable null-coalescing-operator


【解决方案1】:

但是,不存在空值合并运算符;在 Java 8 中可以使用一种模式,它基本上做同样的事情。只需将操作的结果包装在 Optional 中,然后调用 orElse 方法

final String myString = Optional.ofNullable(resultSet.getString(1))
                                .orElse("default");

【讨论】:

  • 我真的很喜欢这个答案。您也可以将有用的orElseGet(Supplier<T>) 方法与此方法一起使用。
【解决方案2】:

直接回答,不,java中不存在

【讨论】:

  • 如果你确定的话,有没有办法向Oracle询问原因?
  • 我问过预言机,它向我透露了这一点:docs.oracle.com/javase/tutorial/java/nutsandbolts/… 那里,你可以在 java 中找到所有运算符,我找不到任何合并运算符,除非你使用三元或者我猜你不是在寻找的 if-else 语句,正如在另一个答案中所说,Guava 做了同样的事情,如果谷歌做了一种方法来填补这个空白,那意味着这个空白真的存在,希望这能解释我有多确定。
  • 它实际上存在于Android Data Binding框架中。
  • 伊戈尔,你能提供一个链接吗?
【解决方案3】:

Guava 提供Objects.firstNonNull

【讨论】:

  • 它看起来很有用,但简单的检查开销很大!
  • 是的,如果您只需要该功能,那显然是开销
猜你喜欢
  • 2011-06-26
  • 2010-12-25
  • 2014-12-04
  • 2015-04-08
  • 2010-10-03
  • 2011-02-13
  • 2019-06-12
  • 2015-06-15
  • 2011-09-30
相关资源
最近更新 更多