scala - How can I use `Class.forName()` to get classes defined in a `ToolBox`? -
मैं स्काला प्रतिबिंब (अर्थात् एक Toolbox
) का प्रयोग करने का प्रयास कर रहा हूं ताकि रनटाइम पर एक क्लास उत्पन्न हो सके
क्या यह संभव है?
मुझे उम्मीद थी कि यह काम करेगा (2.10.3 में मैक्रो स्वर्ग के साथ quasiquotes के लिए):
import scala.reflect.runtime। {CurrentMirror = & gt; सीईएम} def cdef () = q "केस वर्ग MyClass (x: स्ट्रिंग)" def newc (csym: symbol) = q "" new $ {csym.asClass} ("हैलो") "" "val tb = cm MkToolBox () val csym = tb.define (cdef ()) val obj = tb.eval (newc (csym)) val cls = Class.forName ("MyClass")
लेकिन वह एक त्रुटि देता है:
java.lang.ClassNotFoundException: myClass at java.net.URLClassLoader $ 1.run (URLClassLoader.java:366) ...
<पी > (टूलबॉक्स आवरण में एक वर्ग लौटाता है, और इसलिए मैंने पूर्ण नाम का उपयोग करने की भी कोशिश की है, लेकिन कोई भाग्य नहीं।) और इसलिए मुझे संदेह है कि मुझे ये ग़लतफ़हमी है कि कैसे
class.forName ()
के रूप में एक ही क्लासलोडर का उपयोग करने के लिए टूलबॉक्स का उपयोग कर सकते हैं Class.forName ()
वर्गों को परिभाषित करने के लिए टूल बॉक्स
में
कोई अंतर्दृष्टि की सराहना की जाती है, जूलियन
टूलबॉक्स विशिष्ट नामित पैकेजों में कोड का मूल्यांकन करते हैं ताकि मुश्किल नामकरण समस्याओं को दूर किया जा सके। इसके अलावा, मूल्यांकन किए जाने वाले कोड को सिंथेटिक मॉड्यूल की एक सिंथेटिक पद्धति में भी लगाया जाता है, इसलिए सभी वर्ग स्थानीय कक्षाएं बन जाते हैं यही कारण है कि वर्ग .forनाम
काम नहीं कर रहा है।
वर्ग को पकड़ने के लिए, class C (...) पर eval करने के बारे में कैसे; classOf [C]
? वह एक j.l.Class
लौटाएगा जिसे आप ढूंढ रहे हैं। 2.11.x में, Toolbox.define
का उपयोग करने का एक विकल्प है, जो शीर्ष-स्तरीय वर्गों और मॉड्यूल को परिभाषित करता है और प्रतीकों को परिभाषित करता है, लेकिन 2.10.x में मुझे नहीं लगता कि ऐसा करने के लिए बहुत कुछ है बिना classOf
।
Comments
Post a Comment