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

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 规范的语言扩展?


富国沪深
浏览 136回答 3
3回答

有只小跳蛙

您建议的语法在 Java 中无效。您可以使用Streams,但如果您必须检查许多变量,它只会比标准语法更简洁。例如:检查所有引用是否不为空:if (Stream.of(a,b,c).allMatch(Objects::nonNull)) { }检查至少一个引用不为空:if (Stream.of(a,b,c).anyMatch(Objects::nonNull)) { }

慕雪6442864

是的,我知道java还不支持这个。另一种选择是这样的:public boolean allNull(Object... objects) {&nbsp; &nbsp; &nbsp; &nbsp; boolean isNull = true;&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < objects.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isNull = isNull && objects[i] == null;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return isNull;&nbsp; &nbsp; }public boolean anyNull(Object... objects) {&nbsp; &nbsp; boolean isNull = false;&nbsp; &nbsp; for (int i = 0; i < objects.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; isNull = isNull || objects[i] == null;&nbsp; &nbsp; }&nbsp; &nbsp; return isNull;}并像这样使用它:// shortest syntaxvar 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()。

波斯汪

我明白你想要什么,但这会让编译器的人类感到困惑。如果比较值是booleanor类型怎么办Boolean?这将成为一场真正的噩梦。我个人更喜欢要求非空值,因此当其中一个值为空时,程序立即抛出 NPE。这可能会节省您一些调试时间,因为这些异常会尽快抛出。Objects.requireNonNull(a);Objects.requireNonNull(b);Objects.requireNonNull(c);或者只写一个辅助函数:public static void requireAllNonNull(Object... objects) {&nbsp; &nbsp; for (Object object : objects) {&nbsp; &nbsp; &nbsp; &nbsp; Objects.requireNonNull(object);&nbsp; &nbsp; }}并称其为:ObjectUtils.requireAllNonNull(a, b, c);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java