3 回答
TA贡献1824条经验 获得超8个赞
您建议的语法在 Java 中无效。
您可以使用Stream
s,但如果您必须检查许多变量,它只会比标准语法更简洁。
例如:
检查所有引用是否不为空:
if (Stream.of(a,b,c).allMatch(Objects::nonNull)) { }
检查至少一个引用不为空:
if (Stream.of(a,b,c).anyMatch(Objects::nonNull)) { }
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()。
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);
添加回答
举报