code: public synchronized @Nullable <Z> Z map(Function<T, Z> f) {
          if (ref == null) {
              return f.apply(null);
          } else {
              return f.apply(ref.get());
          }
      }
docs: Call some function f on the reference we are storing.
  Saving the value of T after this call returns is COMPLETELY UNSAFE.  Don't do it.
  
  @param f  lambda(T x)
  @param <Z> Return type; &lt;? extends Object&gt;
  @return result of f