code: public static <T extends Cloneable> ValueHolder<T> withImmutableValue(final T value) {
      return new ValueHolder<T>(ObjectUtils.clone(value)) {
        @Override public T getValue() {
          return ObjectUtils.clone(super.getValue());
        }
  
        @Override public void setValue(final T value) {
          super.setValue(ObjectUtils.clone(value));
        }
      };
    }
docs: Factory method to construct an instance of the ValueHolder class with an immutable Object value.
  
  @param <T> the Class type of the Cloneable value.
  @param value the Cloneable, immutable value to hold.
  @return a ValueHolder implementation that enforces the immutability of values it holds
  by way of the Object.clone() method for values that implement the java.lang.Cloneable interface.
  @see java.lang.Cloneable