public static <T,V,W extends V> PropertyValue<T,V> with(Property<T,V> property, Donor<W> valueDonor) { return new PropertyValue<>(property, valueDonor); }
private static <T> PMap<Property<? super T, ?>, PropertyValue<? super T, ?>> byProperty(PropertyValue<? super T, ?>[] propertyValues) { PMap<Property<? super T, ?>, PropertyValue<? super T, ?>> propertyMap = HashTreePMap.empty(); for (PropertyValue<? super T, ?> propertyValue : propertyValues) { propertyMap = propertyMap.plus(propertyValue.property(), propertyValue); } return propertyMap; }
@Override public <V> V valueOf(Property<? super T, V> property, Donor<? extends V> defaultValue) { if (values.containsKey(property)) { //noinspection unchecked return (V) values.get(property).value(); } else { return defaultValue.value(); } } }
private static <T> PMap<Property<? super T, ?>, PropertyValue<? super T, ?>> byProperty(PropertyValue<? super T, ?>[] propertyValues) { PMap<Property<? super T, ?>, PropertyValue<? super T, ?>> propertyMap = HashTreePMap.empty(); for (PropertyValue<? super T, ?> propertyValue : propertyValues) { propertyMap = propertyMap.plus(propertyValue.property(), propertyValue); } return propertyMap; }
@Override public <V> V valueOf(Property<? super T, V> property, Donor<? extends V> defaultValue) { if (values.containsKey(property)) { //noinspection unchecked return (V) values.get(property).value(); } else { return defaultValue.value(); } } }
public static <T,V,W extends V> PropertyValue<T,V> with(Property<T,V> property, Donor<W> valueDonor) { return new PropertyValue<>(property, valueDonor); }
public static <T,V,W extends V> PropertyValue<T,V> with(Donor<W> valueDonor, Property<T,V> property) { return new PropertyValue<>(property, valueDonor); }
public static <T,V,W extends V> PropertyValue<T,V> with(Donor<W> valueDonor, Property<T,V> property) { return new PropertyValue<>(property, valueDonor); }
public static <T,V,W extends V> PropertyValue<T,V> with(Property<T,V> property, W value) { return new PropertyValue<>(property, new SameValueDonor<V>(value)); }
public static <T,V> PropertyValue<T,V> withNull(Property<T,V> property) { return new PropertyValue<>(property, new SameValueDonor<V>(null)); }
public static <T,V,W extends V> PropertyValue<T,V> with(Property<T,V> property, W value) { return new PropertyValue<>(property, new SameValueDonor<V>(value)); }
public static <T,V,W extends V> PropertyValue<T,V> with(W value, Property<T,V> property) { return new PropertyValue<>(property, new SameValueDonor<V>(value)); }
public static <T,V> PropertyValue<T,V> withNull(Property<T,V> property) { return new PropertyValue<>(property, new SameValueDonor<V>(null)); }
public static <T,V,W extends V> PropertyValue<T,V> with(W value, Property<T,V> property) { return new PropertyValue<>(property, new SameValueDonor<V>(value)); }