2015-09-09 15 views
5

में स्पष्ट करने के लिए मैं एक नाम स्थान में इस समारोह का आयात कि नहीं करता है/की आवश्यकता होती है/किसी अन्य संकुल का उपयोग करें:Clojure

(defn crash [msg] 
    (throw (Throwable. msg))) 

कर्सिव (IntelliJ विचार आईडीई प्लगइन) पर प्रकाश डाला गया Throwable और मुझे संदेश देता है Cannot disambiguate overloads of Throwable । मुझे Exception और Error के साथ एक ही संदेश मिलता है।

मुझे इस संदेश के स्रोत को समझ में नहीं आता - मुझे संदेह है कि इन जावा वर्गों को जावा भाषा के अलावा किसी भी अन्य जार फ़ाइलों में परिभाषित किया गया है। इस संदेश को दूर करने के लिए मैं कुछ भी कर सकता हूं?

ये project.clj में हैं: एक String और अन्य एक Throwable उम्मीद की उम्मीद कर एक:

:dependencies [[org.clojure/clojure "1.6.0"] 
       [net.mikera/imagez "0.8.0"] 
       [org.clojure/math.numeric-tower "0.0.4"]] 

उत्तर

9

Throwable दो 1-आर्ग कंस्ट्रक्टर्स (doc) है।

रनटाइम पर Clojure यह पता लगा लेता है (के बाद से, इस विशिष्ट मामले में, यह असंभव है एक वस्तु होने के लिए दोनों एक String और एक Throwable) लेकिन इस प्रतिबिंब के उपयोग की आवश्यकता है।

msg पर एक प्रकार का संकेत जोड़ने के लिए यह निर्दिष्ट करने के लिए कि आप किस अधिभार का उपयोग करने की उम्मीद करते हैं, प्रतिबिंब की आवश्यकता को हटा देगा और उम्मीद है कि शापित हो जाएंगे।

(defn crash [^String msg] 
    (throw (Throwable. msg))) 
+1

दोनों निदान और समाधान दोनों सही हैं - मुझे शायद यह संदेश मित्रवत बनाना चाहिए। जब भी इंटरऑप को संकलक के समान तर्क का उपयोग करके प्रतिबिंब की आवश्यकता होगी तो चेतावनी देने की कोशिश करता है। – Colin

+1

@ कोलिन क्या आप उम्मीदवार अधिभार सूचीबद्ध कर सकते हैं? – cgrand

+1

हां, मैंने कोशिश की लेकिन टूलटिप्स कभी-कभी बहुत बड़े हो गए। मैं इसे फिर से कोशिश करूंगा और देख सकता हूं कि मैं उसके आसपास काम कर सकता हूं या नहीं। – Colin