Groovy - get 和 propertyMissing 之间的区别?

2024-04-02

我缺少一些东西。据我所见,get如果没有财产、配件或物品,这是最后的手段获取属性可用的。实际上,这是否意味着get and 财产缺失做同样的事情?我知道get扩展了字段访问运算符,因此那里肯定发生了一些事情:-)

// Using get
class Foo {
    def name = 'Jahg'
    Object get(String name) {
        'called get'
    }
}

def f1 = new Foo()
assert f1.noexist == 'called get'
// get() is not called for the known property (name)
assert f1.name == 'Jahg'

// Using propertyMissing
class Bar {
    Object propertyMissing(String name) {
        'called propertyMissing'
    }
}

def f2 = new Bar()
assert f2.noexist == 'called propertyMissing'

// When both are defined, get() takes precedence
class Baz  {

    // This one is called
    Object get(String name) {
        'called get'
    }

    Object propertyMissing(String name) {
        'not called'
    }
}

def f3 = new Baz()
assert f3.noexist == 'called get'

嗯,不,它们不一样,如下所示:

class Baz  {
    String name = 'bob'

    Object propertyMissing(String name) {
        'not called'
    }
}

Baz b = new Baz()
assert b.getProperty('name') == 'bob'
assert b.getProperty('whatever') == 'not called'
assert b.name == 'bob'
assert b.whatever == 'not called'

普通的 get(和 getProperty)方法检查属性是否存在,如果不存在则调用 propertyMissing。

当你重载 get 时,你失去了 propertyMissing 功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy - get 和 propertyMissing 之间的区别? 的相关文章

随机推荐