class ValueObjectUtils {

    public static <T> T copyOf(T element) {
        if (element == null) {
            return null;
        }

        CloneOperationsContext.Executable<T> operation = (CloneOperationsContext.Executable<T>) context.operationForClass(element.getClass());
        if (operation == null) {
            return element;
        } else {
            return operation.execute(element);
        }
    }

}