【问题标题】:Shorthand way for assigning object properties in Groovy?在 Groovy 中分配对象属性的简写方式?
【发布时间】:2012-01-20 10:04:52
【问题描述】:

我使用这个约定创建 Groovy 对象...

Item item1 = new Item( name: "foo", weight: "150")

...是否有操作属性对象的简写约定?像这样...

item1( name: "hello", weight: "175") //this does not work, btw ;-)

...而不是...

item1.name = "hello"
item1.weight = "175"

【问题讨论】:

    标签: class object groovy variable-assignment


    【解决方案1】:

    你有with方法,as described by the great Mr Haki

    item1.with{
        name = "hello"
        weight = "175"
    }
    

    【讨论】:

    • @RaffiM 对于 Groovy 和 Grails 用户,他很棒。 (他的博客很棒)
    【解决方案2】:

    是的,你可以这样做:

    item1.metaClass.setProperties(item1, [name: "hello", weight: "175"])
    

    【讨论】:

    • 如果对象没有覆盖setAt 方法或[name: "hello", weight: "175"].each { item1.setProperty it.key, it.value },您也可以执行[name: "hello", weight: "175"].each { item1[it.key] = it.value } 之类的操作。
    【解决方案3】:

    如果我有具体的变量要更改,我更喜欢 item1.with

    item1.with {
        name = "lalal"
        weight = 86
        high = 100
    }
    

    当我有属性图(可以是任何大小)时,我更喜欢 InvokerHelper.setProperties

    @ToString
    class Item{
        def name
        def weight
    }
    Item item1 = new Item( name: "foo", weight: "150")
    
    println "before: $item1"
    use(InvokerHelper) {
        item1.setProperties weight: 22, name: "abc"
    }
    println "after : $item1"
    

    输出:

    before: Item(foo, 150)
    after : Item(abc, 22)
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多