2013-02-21 17 views
5

मैं ग्रोवी के साथ प्यार में पड़ गया और इसे और अधिक उपयोग करने का प्रयास किया। अब मुझे ओरेकल फॉर्म जेडीपी लाइब्रेरी के साथ काम करना है। जब इस पुस्तकालय के साथ काम करने के लिए, आप इस तरह कोड का एक बहुत कुछ लिखना:जावा लाइब्रेरी बनाना "ग्रोवी"

JdapiIterator progIterator = getWorkForm().getProgramUnits(); 
while(progIterator.hasNext()) { 
    ProgramUnit currProgUnit = (ProgramUnit) progIterator.next(); 
    ... 
} 

और cource की मैं चाहूँगा

getWorkForm().programUnits.each { 
    ... 
} 

लिखने के लिए हालांकि, मैं एक मौजूदा जावा पुस्तकालय के लिए एक ग्रूवी इंटरफ़ेस लिखा कभी नहीं और कुछ सहायता की ज़रूरत है। मुझे Groovy 2.0's extension methods के बारे में पता है, लेकिन उस मामले में मैं एक ही नाम के साथ एक अलग नामस्थान में एक वर्ग के बारे में सोच रहा हूं जो केवल उन कार्यों के लिए प्रतिनिधि है जिन्हें मैं रखना चाहता हूं।

each कार्यक्षमता प्रदान करने के लिए सबसे अच्छा तरीका क्या है, लेकिन संग्रह के लिए लागू अन्य सभी बंद भी हैं? अगर आप मुझे सही दिशा में इंगित करते हैं तो मैं सराहना करता हूं!

+7

क्या आप 'getWorkForm() प्रोग्राम नहीं लिख सकते हैं। प्रोग्राम {enit currProgUnit -> ...} पहले से ही? आपको क्या त्रुटि मिल रही है? –

+3

हाँ, मैं हर समय इस तरह की चीज करता हूं। उपरोक्त कोड अपेक्षित के रूप में काम करना चाहिए। एक इंटरफ़ेस रैपर लिखने की आवश्यकता नहीं है जबतक कि आप कुछ सहायक तरीकों को जोड़ना नहीं चाहते हैं। –

+0

बहुत बहुत धन्यवाद, स्वीकृत उत्तर पर टिप्पणी देखें। – ChrLipp

उत्तर

6

आपको प्रदान करने की आवश्यकता एकमात्र विधि iterator() विधि है। फिर आप सभी ग्रोवी ऑब्जेक्ट पुनरावृत्ति विधियों (each(), find(), any(), every(), collect(), ...) मुफ्त में प्राप्त करें!

+0

मैंने सोचा था कि आप 'प्रत्येक' को एक पुनरावर्तक पर भी कर सकते हैं, यानी: '0.with {x -> ([hasNext: {x <10}, अगला: {x ++}] Iterator के रूप में)। प्रत्येक {println it}}' –

+0

मुझे इस सुविधा से अवगत नहीं था। खोदने के बाद मुझे java.lang.Class में कार्यान्वयन (कम से कम ग्रोवी जेडीके डोकू में) मिला। मैंने सोचा कि मुझे और अधिक लागू करना है! – ChrLipp

संबंधित मुद्दे