public ConfigurationOption<Optional<T>> buildOptional() {
required = false;
final List<ChangeListener<Optional<T>>> optionalChangeListeners = new ArrayList<ChangeListener<Optional<T>>>(changeListeners.size());
for (ChangeListener<T> changeListener : changeListeners) {
optionalChangeListeners.add(new ChangeListener.OptionalChangeListenerAdapter<T>(changeListener));
}
final List<Validator<Optional<T>>> optionalValidators = new ArrayList<Validator<Optional<T>>>(validators.size());
for (Validator<T> validator : validators) {
optionalValidators.add(new Validator.OptionalValidatorAdapter<T>(validator));
}
return new ConfigurationOption<Optional<T>>(dynamic, sensitive, key, label, description,
java.util.Optional.ofNullable(defaultValue), configurationCategory,
new OptionalValueConverter<T>(valueConverter), java.util.Optional.class, Arrays.asList(this.tags), required,
optionalChangeListeners, optionalValidators, Arrays.asList(aliasKeys), validOptions);
}