@Override
    protected ClientOptionValue<T> doNewValue(T value) {
        return new ClientOptionValue<>(this, value);
    }
Defines a new {@link ClientOption} of the specified name, default value and merge function.

@param name the name of the option.
@param defaultValue the default value of the option, which will be used when unspecified.
@param validator the {@link Function} which is used for validating and normalizing an option value.
@param mergeFunction the {@link BiFunction} which is used for merging old and new option values.

@throws IllegalStateException if an option with the specified name exists already.
core/src/main/java/com/linecorp/armeria/client/ClientOption.java