3 回答

TA貢獻1824條經(jīng)驗 獲得超8個贊
您建議的語法在 Java 中無效。
您可以使用Stream
s,但如果您必須檢查許多變量,它只會比標準語法更簡潔。
例如:
檢查所有引用是否不為空:
if (Stream.of(a,b,c).allMatch(Objects::nonNull)) { }
檢查至少一個引用不為空:
if (Stream.of(a,b,c).anyMatch(Objects::nonNull)) { }

TA貢獻1812條經(jīng)驗 獲得超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條經(jīng)驗 獲得超4個贊
我明白你想要什么,但這會讓編譯器的人類感到困惑。如果比較值是booleanor類型怎么辦Boolean?這將成為一場真正的噩夢。
我個人更喜歡要求非空值,因此當其中一個值為空時,程序立即拋出 NPE。這可能會節(jié)省您一些調(diào)試時間,因為這些異常會盡快拋出。
Objects.requireNonNull(a);
Objects.requireNonNull(b);
Objects.requireNonNull(c);
或者只寫一個輔助函數(shù):
public static void requireAllNonNull(Object... objects) {
for (Object object : objects) {
Objects.requireNonNull(object);
}
}
并稱其為:
ObjectUtils.requireAllNonNull(a, b, c);
添加回答
舉報