我可以覆盖/委托赋值运算符吗?

时间:2017-04-16 07:51:56

标签: gradle groovy

我开始学习Groovy并面对挑战。

我有这个代码,它将元数据存储到对象:

class Meta {
    final MetaItem name
    final MetaItem description
    // ...
    // And more fields with type MetaItem
    // ...

    Meta() {
        name = new MetaItem("name")
        description = new MetaItem("description")
    }

    void setName(String name) {
        this.name.value = name
    }

    String getName() {
        return this.name.value
    }

    void setDescription(String description) {
        this.description.value = description
    }

    String getDescription() {
        return this.description.value
    }

    // ...
    // And more methods. Two for each field
    // ...
}

class MetaItem {
    private final def id
    def value

    MetaItem(String id) {
        this.id = id
    }
}

// Validating

def meta = new Meta()

assert meta.name == null
assert meta.description == null

meta.with {
    name = "Name"
    description = "Desc"
}

assert meta.name == "Name"
assert meta.description == "Desc"

print "Success!"

从代码中可以看出,当添加新字段时,它会在卷中增加,因为对于每个字段,您需要添加两个方法。这可以以某种方式进行优化吗?将赋值操作从对象重定向到其成员。我看过代表,但这不是我需要的。

P.S。我无法使用.value访问权限,因为此类用于Gradle扩展,我需要像这样配置:

myExtension {
    meta {
        name = "Name"
        description = "Desc"
        // And many others
    }
}

P.P.S。抱歉我的英文不好,这不是我的第一语言

0 个答案:

没有答案