class PropertyConfigurationImpl implements PropertyConfiguration<C, P> {

    @Override
    @SuppressWarnings("unchecked")
    public PropertyConfiguration<C, P> onChange(SerializableBiConsumer<C, P> onChangeHandler) {
        Objects.requireNonNull(onChangeHandler, "Parameter 'onChangeHandler' " +
                "cannot be null!");
        if (this.onChangeHandler != null) {
            throw new IllegalStateException(String.format("onChangeHandler " +
                    "for property %s has already been set and cannot be " +
                    "overwritten!", data.getName()));
        }
        this.onChangeHandler = (c, o) -> onChangeHandler.accept(c, (P) o);
        return this;
    }

    public  PropertyConfigurationImpl(Class<C> componentType, String propertyName,
                                     Class<P> propertyType, P defaultValue);

}