为了账号安全,请及时绑定邮箱和手机立即绑定

用于布尔组合的java较短的sytnax

用于布尔组合的java较短的sytnax

富国沪深 2023-08-04 14:44:16
java中有没有语法可以编写这段冗长的代码if(a!=null && b!=null && c!=null)if(a!=null || b!=null || c!=null)变成这样的东西:if( (a && b && c) != null)if( (a || b || c) != null)如果没有,是否有可能建议将其作为 java 规范的语言扩展?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您建议的语法在 Java 中无效。

您可以使用Streams,但如果您必须检查许多变量,它只会比标准语法更简洁。

例如:

检查所有引用是否不为空:

if (Stream.of(a,b,c).allMatch(Objects::nonNull)) {

}

检查至少一个引用不为空:

if (Stream.of(a,b,c).anyMatch(Objects::nonNull)) {

}


查看完整回答
反对 回复 2023-08-04
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

是的,我知道java还不支持这个。


另一种选择是这样的:


public boolean allNull(Object... objects) {

        boolean isNull = true;

        for (int i = 0; i < objects.length; i++) {

            isNull = isNull && objects[i] == null;

        }

        return isNull;

    }


public boolean anyNull(Object... objects) {

    boolean isNull = false;

    for (int i = 0; i < objects.length; i++) {

        isNull = isNull || objects[i] == null;

    }

    return isNull;

}

并像这样使用它:


// shortest syntax

var notNull = !allNull(a,b,c); // instead of Stream.of(a,b,c).allMatch(Objects::nonNull)

var notNull = !anyNull(a,b,c); // instead of Stream.of(a,b,c).anyMatch(Objects::nonNull)

哪种解决方案性能更好(更快)?-版本stream.of()还是这个?


但是,在使用 -version 时,我们必须添加两个实用方法而不是 no stream.of()。


查看完整回答
反对 回复 2023-08-04
?
波斯汪

TA贡献1811条经验 获得超4个赞

我明白你想要什么,但这会让编译器的人类感到困惑。如果比较值是booleanor类型怎么办Boolean?这将成为一场真正的噩梦。


我个人更喜欢要求非空值,因此当其中一个值为空时,程序立即抛出 NPE。这可能会节省您一些调试时间,因为这些异常会尽快抛出。


Objects.requireNonNull(a);

Objects.requireNonNull(b);

Objects.requireNonNull(c);

或者只写一个辅助函数:


public static void requireAllNonNull(Object... objects) {

    for (Object object : objects) {

        Objects.requireNonNull(object);

    }

}

并称其为:


ObjectUtils.requireAllNonNull(a, b, c);


查看完整回答
反对 回复 2023-08-04
  • 3 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信