code: public synchronized final V get(K key) {
          if (key == null) {
              throw new NullPointerException("key == null");
          }
  
          V result = map.get(key);
          if (result != null) {
              return result;
          }
  
          result = create(key);
  
          if (result != null) {
              map.put(key, result);
              trimToSize(maxSize);
          }
          return result;
      }
docs: Returns the value for {@code key} if it exists in the cache or can be
  created by {@code #create}. If a value was returned, it is moved to the
  head of the queue. This returns null if a value is not cached and cannot
  be created.