首页 > 解决方案 > 分配不返回无效

问题描述

我在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。我错过了什么?

标签: javavariable-assignmentternary-operator

解决方案


我错过了什么?

事实上,赋值表达式的结果就是被赋值的值。:-) 因此,在该代码中,调用的结果createRowMap被分配给rowMap 作为rowMap函数的结果返回。就像:

a = b = 42;

...设置b42,然后设置a42b = 42分配的结果)。

效果就像代码是这样写的一样:

public Map<R, Map<C, V>> rowMap() {
  Map<R, Map<C, V>> result = rowMap;
  if (result != null) {
    return result;
  }
  rowMap = createRowMap();
  return rowMap;
}

推荐阅读