code: @Override
      public R get(final I key) {
  
          final P params = getParam(key);
  
          final String paramsKey = params.getKey();
  
          // Retrieve the resource weak reference from the map
          final SoftReference<R> resourceSoftRef = this.resourceMap.get(paramsKey);
  
          // Warning the gc can collect gthe resource between the test and the getter call so we have to get the resource immediately
          // and test it instead of testing the reference value
  
          // The resourceSoftRef may be null if nobody use it
          // If the resource reference is not null try to grab its value
          R resource = resourceSoftRef == null ? null : resourceSoftRef.get();
  
          // When the reference is null (first access time) or the resource is null (the resource has been collected y gc)
          if (resourceSoftRef == null || resource == null) {
              // We must (re)build an instance and then store it weakly
              resource = buildResource(key, params);
              set(paramsKey, resource);
              params.hasChanged(false);
          }
          return resource;
      }
docs: {@inheritDoc}