2012-02-13 20 views
9

स्कैला से, मैं एक जावा लाइब्रेरी का उपयोग कर रहा हूं जो क्लास तर्क की अपेक्षा करता है। उदाहरण:स्कैला - एक स्ट्रिंग से कक्षा प्राप्त करें

def service: OAuthService = new ServiceBuilder() 
            .provider(classOf[RunApi]) 

रनएपी जावा क्लास है।

हालांकि मैं प्रदाता को विभिन्न प्रकार के वर्गों को पास करने में सक्षम होना चाहता हूं। मेरे पास स्ट्रिंग प्रारूप में उनकी एक सूची है।

उदाहरण, अगर मुझे स्ट्रिंग प्रारूप में रनएपी पता है; जैसे "com.me.RunApi", उपरोक्त कोड के बराबर कैसे बना सकते हैं?

उत्तर

14

उपयोग forName विधि:

scala> Class.forName("scala.collection.mutable.ArrayBuffer") 
res0: java.lang.Class[_] = class scala.collection.mutable.ArrayBuffer 
+0

धन्यवाद, सोचा था कि यह काम करने के लिए जा रहा था, लेकिन: [त्रुटि] (org.scribe.builder.api.Api) org.scribe.builder.ServiceBuilder [त्रुटि ] (java.lang.Class [_ <: org.scribe.builder.api.Api]) org.scribe.builder.ServiceBuilder [त्रुटि] पर लागू नहीं किया जा सकता है (java.lang.Class [? 0 (विधि सेवा में)] [त्रुटि] .provider (class.forName ("com.me.RunApi")) [त्रुटि]^ [त्रुटि] एक त्रुटि मिली –

+2

बस इसे आवश्यक प्रकार पर डालें: 'class.forName (" com.me.R unApi ")। asstanceOf [वर्ग [_ <: org.scribe.builder.api.Api]]'। –

+0

धन्यवाद। मैंने कोशिश की कि साथ ही कक्षा .forName ("com.me.RunApi")। AsInstanceOf (एपीआई), लेकिन: java.lang.Class को org.scribe.builder.api.Api पर नहीं डाला जा सकता है। RunApi एक अमूर्त पैरेंट क्लास बढ़ाता है जो एपीआई इंटरफ़ेस लागू करता है। –

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