我缺少一些东西。据我所知,如果没有可用的属性、访问器或getProperty ,则get是最后的手段。实际上,这不是意味着get和propertyMissing做同样的事情吗?我知道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'
Run Code Online (Sandbox Code Playgroud)
嗯,不,它们不一样,如下所示:
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'
Run Code Online (Sandbox Code Playgroud)
普通的 get(和 getProperty)方法检查属性是否存在,如果不存在则调用 propertyMissing。
当你重载 get 时,你失去了 propertyMissing 功能。
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |