के साथ क्लोजर से इंटरऑप मैं जावा क्लास के साथ क्लोजर में काम कर रहा हूं जो रिकॉर्ड की एक श्रृंखला वाले डोमेन विशिष्ट बाइनरी फ़ाइल के लिए पुनर्प्राप्ति API प्रदान करता है।गैर-मानक पुनरावर्तक जावा एपीआई
जावा वर्ग एक फ़ाइल के साथ आरंभ नहीं हो जाता और फिर, एक .query
विधि है जो एक आंतरिक वर्ग जो केवल एक ही विधि .next
है का एक उदाहरण देता है प्रदान करता है, इस प्रकार सामान्य जावा संग्रह एपीआई के साथ अच्छी तरह नहीं खेल। न तो बाहरी और न ही आंतरिक वर्ग किसी भी इंटरफ़ेस को लागू करता है।
.query
विधि आंतरिक कक्षा के बजाय शून्य वापस आ सकती है। .next
विधि कोई रिकॉर्ड स्ट्रिंग या शून्य नहीं देता है यदि कोई और रिकॉर्ड नहीं मिलता है, तो यह पहले कॉल पर तुरंत शून्य हो सकता है।
मैं इस जावा एपीआई को और जावा क्लास लिखने के बिना क्लोजर के भीतर से कैसे काम करूं?
सबसे अच्छा मैं के साथ आ सकता है:
(defn get-records
[file query-params]
(let [tr (JavaCustomFileReader. file)]
(if-let [inner-iter (.query tr query-params)] ; .query may return null
(loop [it inner-iter
results []]
(if-let [record (.next it)]
(recur it (conj results record))
results))
[])))
यह मैं परिणामों का एक वेक्टर clojure seq कपोल-कल्पना के साथ काम करने देता है। जावा एपीआई से सीक का पर्दाफाश करने के अन्य तरीके हैं, या तो आलसी-सीक या प्रोटोकॉल का उपयोग कर?
यह एक दिलचस्प सवाल है, लेकिन गैर-मानक जावा एपीआई द्वारा आपका क्या मतलब है? – octopusgrabbus
@ ऑक्टोपसग्राबस विशेष रूप से मेरा मतलब है कि जावा कोड java.util.Iterator प्रदान नहीं करता है और न ही java.lang.Iterable लागू करता है। तार्किक रूप से जावा कोड पुनरावृत्ति प्रदान कर रहा है लेकिन ऐसा करने के लिए मानक एपीआई के कनेक्शन के बिना। –