【问题标题】:check for null using conditional operators in java在java中使用条件运算符检查null
【发布时间】:2017-12-19 04:18:29
【问题描述】:

我必须多次重复这样的代码:

if (!StringUtils.isEmpty(line[9])) {
    tbl.setVal(line[9].charAt(0));
}

我可以像条件运算符一样清理这段代码,使其内联吗?我看过 C# 的示例,但找不到类似的 java 示例。

或者我可以把它抽象成一个函数吗?可以处理多种类型的通用函数?

我的目标是如果line[x] 的值为空,我不想调用setVal

【问题讨论】:

  • nullempty有区别
  • @Ravi 我刚刚更新了帖子...如果字符串line 的值为空,我希望不设置tbl 中的对象。
  • 条件运算符的操作数是表达式,不是语句,Java中的语句也不是表达式。你的标题仍然是null
  • 听起来像是 XY 问题。如果您多次重复这些行,则单独重组它们不会有太大帮助。你需要从更高的层次来处理代码,并首先看看你能做些什么来避免重复。
  • @Holger 哈哈!我试图展示相同的方法......

标签: java java-8


【解决方案1】:

你可以这样创建方法:

public static void applyIfNotEmpty(Consumer<String> consumer, String value) {
    if (!StringUtils.isEmpty(value)) {
        consumer.accept(value);
    }
}

然后这样使用:

applyIfNotEmpty(v -> tbl.setVal(v.charAt(0)), line[9]);

【讨论】:

    【解决方案2】:

    解决这个问题的聪明方法是像你说的那样创建一个通用方法。但是,空变量和空变量是有区别的。

    要检查空变量,最好抛出 NPE。

    此外,如果您要检查列表中的元素,请查看此链接,这是一个优雅的解决方案。 Null check in an enhanced for loop

    您可以用来实现此目的的其他方法是:

    Validate.notNull(variable)
    Validate.notEmpty(variable) - Depending on what you really want to check for.
    

    这些验证将根据其条件抛出一个IllegalArgumentException

    也发现了这个……值得一读! Java: How to check for null pointers efficiently

    【讨论】:

      【解决方案3】:

      你可以有这样的功能

      private void setValueInTbl(String input) {
        if (!StringUtils.isEmpty(input) {
          tbl.setVal(input.charAt(0));
        }
      }
      

      那么你可以这样称呼它

      setValueInTbl(line[9]);
      

      此外,三元运算符也不理想,因为you need two values to give it after evaluation

      【讨论】:

      • 您可能知道,void 方法不需要返回,但它可以拥有它。就个人而言,我认为它提高了可读性,即使它不是必需的。 More on return in a void method is explained by Oracle here.
      • 我当然知道,但是很抱歉,不得不反驳。它确实不会提高可读性。它只是过时的代码,没有任何价值。你为什么不写if(true) return; else return;呢?同样无用的代码...顺便说一句:您提供的链接也不建议在最后放置返回。
      • 不用道歉,看来我搞错了。我将从原始答案中删除该行。为了澄清起见,我让意见问题进入答案,这样做无视发布答案的规则(没有意见)。
      【解决方案4】:

      为什么不创建一个方法来处理一般,而不仅仅是StringnotEmpty

      public static <T> void consumeIf(Consumer<T> consumer, T value, Predicate<T> predicate) {
          Optional.ofNullable(value).filter(predicate).ifPresent(consumer);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        相关资源
        最近更新 更多