public void setValue(Object self, Object value) {
        Object field = property.getValue(self);
        if (field == null) {
            try {
                field = property.getType().newInstance();
                property.setValue(self, field);
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new RuntimeException(ex);
            }
        }

        valueProperty.setValue(field, value);
    }