code: public String rowGet(String key) {
          String resolvedKey = resolveRowKey(key);
          String cachedValue = rowMapCache.get(resolvedKey);
          if (cachedValue != null) {
              return cachedValue;
          }
          String value = rowMap.get(resolvedKey);
          if (value == null && parent != null) {
              value = parent.rowGet(resolvedKey);
          }
          if (value == null) {
              return null;
          }
          String expandedString = expand(value, false);
          rowMapCache.put(resolvedKey, expandedString);
          return expandedString;
      }
docs: Looks up and returns the RowSpec associated with the given key. First looks for an
  association in this LayoutMap. If there's no association, the lookup continues with the
  parent map - if any.
  
  @param key key whose associated value is to be returned.
  @return the row specification associated with the {@code key}, or {@code null} if no
  LayoutMap in the parent chain contains an association.
  
  @throws NullPointerException if {@code key} is {@code null}
  
  @see Map#get(Object)