我在Google Guava Github上找到了这段代码,并且我无法弄清楚为什么在第5行中,如果满足条件,rowMap
方法不会返回void:
private transient @MonotonicNonNull Map<R, Map<C, V>> rowMap;
public Map<R, Map<C, V>> rowMap() {
Map<R, Map<C, V>> result = rowMap;
return (result == null) ? rowMap = createRowMap() : result;
}
Map<R, Map<C, V>> createRowMap() {
return new RowMap();
}
这行不等于:
if (result == null) {
return rowMap = createRowMap();
} else {
return result;
}
然后对rowMap的赋值将返回void。我错过了什么?
最佳答案
我错过了什么?
赋值表达式的结果就是所赋值的事实。 :-)因此,在该代码中,对createRowMap
的调用结果分配给了rowMap
,并作为rowMap
函数的结果返回。就像:
a = b = 42;
...将
b
设置为42
,然后将a
设置为42
(b = 42
分配的结果)。效果与代码是这样写的相同:
public Map<R, Map<C, V>> rowMap() {
Map<R, Map<C, V>> result = rowMap;
if (result != null) {
return result;
}
rowMap = createRowMap();
return rowMap;
}