【问题标题】:can use ObjectUtils.identityToString() for checking the Object null可以使用 ObjectUtils.identityToString() 检查 Object null
【发布时间】:2018-12-18 05:08:36
【问题描述】:

在将值设置为我的 bean 类属性之前,请先找到我下面的代码,该代码使用三元运算符检查 null。

doc.setCatalog_description(sourceAsMap != null && sourceAsMap.get("catalog_description") != null ? sourceAsMap.get("catalog_description").toString() : null);

有没有其他方法可以简化如下代码。我只是通过使用org.apache.commons.lang3.ObjectUtils; 方法进行探索。但不确定它是否正确。

doc.setCatalog_description(ObjectUtils.identityToString(sourceAsMap.get("catalog_description")));

【问题讨论】:

  • 在您提出的解决方案中,如果 sourceMap 为 null,则会发生 NullPointerException。
  • 如果你想处理 sourceMap 中缺失的键并返回一个默认值,那么 java 8 提供了这个。使用sourceMap.getOrDefault(key, defaultVal)
  • 您是否正在寻找一种在满足所有条件时提取catalog_description 的简短方法? ObjectUtils.identityToString将根据给定对象的类名和哈希码返回一个非常技术性的描述。前者和后者是不同的东西。

标签: java apache-commons-lang3


【解决方案1】:

我认为您正在寻找方法 ObjectUtils.toString(Object)

if (sourceAsMap != null) {
    final String description = ObjectUtils.toString(sourceAsMap.get("catalog_description"));
    doc.setCatalog_description(description);
}

如果您使用的是jdk7或更高版本,可以将方法替换为java.util.Objects.toString(Object)

if (sourceAsMap != null) {
    final String description = Objects.toString(sourceAsMap.get("catalog_description"));
    doc.setCatalog_description(description);
}

我不知道sourceAsMap是否可以为null,但是如果你设置了几个参数,你应该检查一次是否为null。

【讨论】:

  • 请注意:除了Objects.toString(Object),还有String.valueOf(Object)
  • @Izruo - 那么,我们可以使用String.valueOf(Object) 插入Objects.toString(Object)..吗?
  • 喜欢这个doc.setCatalog_description(String.valueOf(sourceAsMap.get("catalog_description")));..?
  • 是的,就像那样,但是您应该提高那段代码的可读性。对我来说,一行代码的操作太多了。
【解决方案2】:

为了可读性和清晰性,我建议将这部分功能提取到它自己的方法中:

String getDescOrNull(Map<String, Object> sourceAsMap) {
    final String key = "catalog_description";
    if (sourceAsMap == null || !sourceAsMap.containsKey(key)) {
        return null;
    }
    return sourceAsMap.get(key);
}

然后:

doc.setCatalog_description(getDescOrNull(sourceAsMap));

【讨论】:

    【解决方案3】:

    在将值设置为我的 bean 类属性之前使用三元运算符检查 null

    所以我认为您需要从地图中设置多个 bean 属性。

    最好和简单的解决方案是在 sourceMap 上检查一次 null 条件,然后使用三元运算符设置属性。

     if(sourceAsMap != null){
          doc.setCatalog_description(sourceAsMap.get("catalog_description") != null ? sourceAsMap.get("catalog_description").toString() : null);
          doc.setAnother_description(sourceAsMap.get("another_description") != null ? sourceAsMap.get("another_description").toString() : null);
        }
    

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2018-04-28
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多