code: @SuppressWarnings("unchecked")
    public <T extends VALUE> T withCacheEvict(KEY key, Supplier<VALUE> cacheableOperation) {
  
      Assert.notNull(cacheableOperation, "Supplier is required");
  
      VALUE result = cacheableOperation.get();
  
      evict(getLock(), key);
  
      return (T) result;
    }
docs: This caching data access operation invokes the supplied {@link Supplier cacheable operation} and then evicts
  the entry in the {@link Cache} identified with the given {@link KEY key} if present, but only if
  the {@link Supplier cacheable operation} completes successfully.
  
  @param <T> {@link Class type} of the return {@link VALUE value}.
  @param key {@link KEY key} identifying the entry in the {@link Cache} to evict.
  @param cacheableOperation {@link Supplier} used to compute or load a {@link VALUE value}.
  @return the {@link VALUE result} of the {@link Supplier cacheable operation}.
  @throws IllegalArgumentException if the {@link Supplier} is {@literal null}.
  @see java.util.function.Supplier
  @see #getCache()
  @see #getLock()