class PropertyValue implements Serializable, Iterable<PropertyValue> {

    public PropertyValue setKey(String key) {
        checkImmutable();
        if(!Objects.equals(this.key, key)) {
            this.key = Objects.requireNonNull(key);
            version.incrementAndGet();
        }
        return this;
    }

    public  PropertyValue(String key);
    protected  PropertyValue(String key, String value);

}