code: public double getFitness(T candidate, List<? extends T> population)
      {
          Double fitness = cache.get(candidate);
          if (fitness == null)
          {
              fitness = delegate.getFitness(candidate, population);
              cache.put(candidate, fitness);
          }
          return fitness;
      }
docs: {@inheritDoc}
  
  <p>This implementation performs a cache look-up every time it is invoked.  If the
  fitness evaluator has already calculated the fitness score for the specified
  candidate that score is returned without delegating to the wrapped evaluator.</p>