【问题标题】:How to code an intelligent coalesce in Java?如何在 Java 中编写智能合并?
【发布时间】:2015-07-03 00:48:51
【问题描述】:

object.getProperty().getSubProperty().getSubSubProperty();

考虑上面的代码。一个对象有一个属性,有一个 subProperty,有一个 subSubProperty,可以用 getter 方法访问。

我们可以在 Java 中做些什么来实现以下目标:

Util.coalesce(object.getProperty().getSubProperty().getSubSubProperty(), defaultSubSubProperty);

org.apache.commons.lang3.ObjectUtils.defaultIfNull 有这样的东西。但是这种方法的问题是它只在 property 和 subProperty 不为 null 时才有效。我想要一种方法来获取 subSubProperty 或 defaultSubSubProperty,即使 property 和 subProperty 为空。

我们怎样才能做到这一点?

【问题讨论】:

    标签: java nullpointerexception coalesce null-coalescing


    【解决方案1】:

    您可以在 Java 8 中使用 Optional。

    String s = Optional.ofNullable(object)
                       .map(Type::getProperty)
                       .map(Type2::getSubProperty)
                       .map(Type3::getSubSubProperty)
                       .orElse(defaultValue);
    

    您也可以使用orElseGet(Supplier)orElseThrow(Throwable)

    【讨论】:

    • 太棒了。但我仍然有一个问题。这里,生产 Java 是 Java 7,我们可以在 Java 7 中使用 jar 或类似的东西吗?
    • @GarouDan 理论上,有库的反向移植,但我没有使用任何。如果没有语法糖,我认为使用库比自己编写更痛苦。
    • @GarouDan 您仍然可以使用 Guava 的 Optional (ofNullable -> fromNullable, map -> transform),但您必须将所有方法引用扩展为匿名子类,这将使您的代码变得非常大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2017-09-02
    • 2012-04-09
    • 1970-01-01
    相关资源
    最近更新 更多