Bu test kodum var:Bu durumda neden Groovy'de bir NullPointerException alamıyorum?
def test = null
test.each { }
Neden bir istisna alamıyorum?
Bu test kodum var:Bu durumda neden Groovy'de bir NullPointerException alamıyorum?
def test = null
test.each { }
Neden bir istisna alamıyorum?
each
uygulanması bunun bir boşlukla güvenli bir şekilde hedef var içinde iterator
yöntemi çağırmak çalışır. each
null nesnesinde veya iterator
yöntemi olmayan bir nesne çağrılırsa, hiçbir şey olmaz.
Object each(Closure closure) {
if (this?.respondsTo("iterator")) {
def iterator = this.iterator()
while (iterator.hasNext() {
def item = iterator.next()
closure(item)
}
}
return this
}
§ gibi bir şey olabilir
, bu yöntem muhtemelen Java yerine Groovy yazılmıştır
Aslında, org.codehaus içinde .groovy.runtime.NullObject.java', 'public Iterator iterator() {return Collections.EMPTY_LIST.iterator(); } 'Yani 'NullObject' (' null') '' 'her bir' ' –
@tim_yates tarafından sorgulandığında bir' '' '' '' '' '' '' bir döndürücü '' döndürür '', ama benim uygulamamı tercih ederim :) –
Hehe, hayal dünyasında çok fazla keyif alıyor ha? ;-) –
Her bir kapatma kullanıldığında boş değer, 0 öğeli bir koleksiyonla aynıdır. Eğer kodu
def test=null
test.each {println "In closure with value "+it}
varsa baskı deyimi yürütme olmayacaktır. Testi
def test=[1,2,3]
'a değiştirirseniz, çıktı alırsınız.
İlgili questiuon http: Buraya : //stackoverflow.com/questions/2480195/what-is-the-purpose-of-the-nullobject-class-in-groovy –
@tim_yates İlgili soruya bağlantı için teşekkürler – res1