2011-11-29 11 views
24

ग्रोवी में फ़ील्ड नाम से पहले क्या मतलब है? कुछ कक्षाओं मुझे लगता है कि सीधे सुलभ नहीं हैं निजी क्षेत्रों का उपयोग करने में सक्षम हूँ के लिए, उदाहरण के लिए ComposedClosure डालें:ग्रोवी @ फ़ील्ड से पहले प्रतीक

public class Person { 
    private String name 
} 

def u = new Person(name:"Ron") 
println [email protected] //Ron 
println u.name //Ron 

a = {2} >> {3} 
println [email protected] //first closure object 
println a.first //runtime error 
+1

निजी फ़ील्ड तक पहुंचने की आपकी क्षमता वर्तमान ग्रोवी कार्यान्वयन में एक बग नहीं है। आपको इसका उपयोग नहीं करना चाहिए क्योंकि वे उम्मीदवार संस्करण 2.0 में बग को ठीक कर देंगे और यह खराब ओओ अभ्यास –

+1

@ डॉन यह 2.0 के शेड्यूल में नहीं है, यह 3.0 में हो सकता है, लेकिन जूरी के रूप में मैं अपनी सांस नहीं पकड़ूंगा अभी भी यह एक बग या एक विशेषता है के रूप में बाहर ;-) –

उत्तर

41

यह आपको संपत्ति एक्सेसर्स के ग्रोवी के उपयोग को ओवरराइड करने की अनुमति देता है। यदि आप लिखते हैं:

println u.name 

ग्रोवी स्वचालित रूप से जेनरेट किए गए गेटर Person.getName() को आवेदित करेगा। यदि आप लिखते हैं:

println [email protected] 

यह सीधे जावा में जैसा फ़ील्ड पर जाएगा। बंद होने के मामले में, ऐसा लगता है कि first फ़ील्ड है लेकिन संबंधित getFirst एक्सेसर नहीं है।

ग्रोवी मैनुअल में, इसे direct field access operator के रूप में प्रलेखित किया गया है।

6

इसका मतलब है कि आप एक क्षेत्र तक पहुँच रहे हैं सीधे, बल्कि एक गेटर से गुजर रही है।

Groovy operator docs देखें, हालांकि कहने के लिए और कुछ नहीं है। शायद इससे बचने के अलावा।

कारण यह एक ComposedClosure के लिए विफल रहता है first (या second) के लिए कोई गेटर है क्योंकि है।