2016-04-15 59 views
1

有些東西我缺少。從我所看到的,得到是最後的手段,如果沒有財產,accessor或getProperty可用。實際上,這是不是意味着得到propertyMissing做同樣的事情?我知道得到擴展了現場訪問運算符所以必須有一些事情有:-)Groovy - get和propertyMissing之間的區別?

// 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' 

回答

1

哦,不,他們是不一樣的,如通過以下證明:

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功能。

+0

謝謝你解釋它 –

相關問題