-
Notifications
You must be signed in to change notification settings - Fork 20
Open
Milestone
Description
Currently, OptionalProperty has the following constructors:
public OptionalProperty(@NotNull Property<T> baseProperty) {
this.baseProperty = baseProperty;
this.defaultValue = Optional.empty();
}
public OptionalProperty(@NotNull Property<T> baseProperty, @NotNull T defaultValue) {
this.baseProperty = baseProperty;
this.defaultValue = Optional.of(defaultValue);
}In ConfigMe 2.0, we want to make property types more prominent because they can be combined more easily. Thus, the following constructor would be desirable:
public OptionalProperty(@NotNull String path, @NotNull PropertyType<T> propertyType,
@NotNull T defaultValue) {
this.baseProperty = new TypeBasedProperty<>(path, propertyType, defaultValue);
this.defaultValue = Optional.of(defaultValue);
}^ This constructor, however, forces that a default value be provided. What if the user wants Optional.empty to be the default? We need a default value in order to construct the TypeBasedProperty.
To do
Goal of this issue is to revise the implementation of OptionalProperty:
- Change
OptionalPropertyto have a constructor like above, as well as a constructor without thedefaultValueparam- In order to achieve this, the field
basePropertymust be replaced by aPropertyTypefield and a nullabledefaultValuefield
- In order to achieve this, the field
- Adapt usages in
PropertyInitializerto no longer have the fake default value (very nice change!) - In order to maintain compatibility with a "base Property", introduce some way to still be able to create an
OptionalPropertybased on anotherProperty<?>. We cannot assume that it has aPropertyTypethat we can extract from it.- Probably introduce some extension of
OptionalPropertythat overrides all the necessary behavior. This will be ugly (because some fields in the parent will be unused) but this will maintain backwards compatibility for those who wish. - With some static method on
OptionalPropertywe could even hide the fact that an extension is at play.
- Probably introduce some extension of
- In
PropertyInitializer,optionalListPropertyandoptionalSetPropertyreturn an optional for string collections. This is not clear from the name and should be revised. It would be better to add aPropertyTypeparameter to these methods so that the type of set/list can be specified.- Varargs could be added to define the default value, if desired. This does not break current behavior, since 0 entries can still be provided for a varargs. In that case, assume empty Optional as default value
Metadata
Metadata
Assignees
Labels
No labels