code: public static NominalValue getInstance(String val) {
          if (val != null && val.length() < 20) {
              NominalValue result;
              synchronized (cache) {
                  result = cache.get(val);
                  if (result == null) {
                      result = new NominalValue(val);
                      cache.put(val, result);
                  }
              }
              return result;
          } else {
              return new NominalValue(val);
          }
      }
docs: Creates a new nominal value. If <code>val</code>'s length is less than 20
  characters, the created {@link NominalValue} object will be cached and
  reused.
  
  @param val a {@link String}. If <code>null</code>, {@link NominalValue}
  with <code>""</code> will be created.
  @return a {@link NominalValue}.