2012-07-28 12 views
33

मैं क्लोजर में जावा लिब लपेट रहा हूं, लेकिन मुझे परिवर्तनीय लंबाई तर्कों से निपटने में समस्याएं हैं। कहें,क्लोजर में जावा चर लंबाई लंबाई को कैसे संभालें?

TestClass.aStaticFunction(Integer... intList){/*....*/} 

मैं इस कार्य को क्लोजर में कैसे कॉल कर सकता हूं?

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/9103777/implement-a-java-interface-method-with-a -वर्तनीय-संख्या-का-तर्क-इन-क्लोजर) – Jeremy

उत्तर

39

चूंकि जावा varargs actually arrays हैं, तो आप एक सरणी पास करके क्लोजर में vararg फ़ंक्शन को कॉल कर सकते हैं।

आप एक Clojure seq परिवर्तित कर सकते हैं एक सरणी में (शायद चर तर्क कार्यों के Clojure की विविधता का उपयोग करके):

(TestClass/aStaticFunction (into-array Integer [(int 1),(int 2)])) 

या

(defn a-static-function-wrapper [& args] 
    (TestClass/aStaticFunction (into-array Integer args)) 

या एक सरणी बनाने के लिए और अपने सूचकांक मैन्युअल रूप से सेट

(TestClass/aStaticFunction (doto (make-array Integer 3) 
           (aset 0 first-element) 
           (aset 1 second-element) 
           (aset 2 third-element))) 
+1

'इंटीजर/टाइपवाई' एक आदिम सरणी तैयार करेगा, जो शायद यहां नहीं चाहता था .... संदेह है कि आप केवल 'इंटेगर' चाहते हैं। – mikera

+0

@ मिकरा मुझे भी आदिम सरणी की आवश्यकता है! बहुत बहुत धन्यवाद !! – qiuxiafei

5

जावा परिवर्तनीय लंबाई तर्क वास्तव में इनपुट के रूप में एक सरणी चाहते हैं।

(TestClass/aStaticFunction (into-array Integer some-sequence-of-integers)) 
4
(TestClass/aStaticFunction (to-array '(1 2 3 4 5))) 

उदा के लिए:

तो Clojure में कॉल की तरह कुछ किया जाना चाहिए

(java.util.Arrays/asList (to-array '(1 2 3 4 5))) 
की ([Clojure में आर्ग के परिवर्तनशील के साथ एक जावा इंटरफ़ेस विधि को लागू करें]
संबंधित मुद्दे