2013-09-07 6 views
10

क्या स्काला में निम्नलिखित जावा विधि घोषणा के बराबर है:स्काला: सामान्य प्रकार पैरामीटर के साथ की घोषणा विधि

public <T> T readValue(java.lang.String s, java.lang.Class<T> tClass) 

दूसरे शब्दों में, मैं एक विधि है कि प्रकार टी के एक वर्ग ले जाता है की घोषणा करने के लिए करना चाहते हैं , और उस प्रकार का एक उदाहरण देता है।

उत्तर

24
  • मैं तुम क्या चाहते करने के लिए बहुत करीब:

    def readValue[T:ClassTag](s:String):T = { 
        val tClass = implicitly[ClassTag[T]].runtimeClass 
        //implementation for different classes. 
    } 
    

    उपयोग एक सा जावा में से स्पष्ट है:

    val myDouble = readValue[Double]("1.0") 
    
+0

बिल्कुल सही, धन्यवाद अर्सेने ... मैं 4 मिनट में अपने जवाब जाहिरा तौर पर है, तो स्वीकार कर सकते हैं: एक अन्य, अधिक शामिल भी तरह से, कुछ उपयोगकर्ता द्वारा प्रदान की वस्तु को readValue के कार्यान्वयन बाह्यरूप करने के लिए (प्रकार वर्ग) है तब ऐसा करेंगे। – Neil

+0

आपका स्वागत है। जब आपने विधि लागू की थी और उत्तर II को देखा था, तो आपको यह अधिक विस्तारणीय और मॉड्यूलर मिलेगा। –

+0

@ नील, 'क्लासटाग स्कैला में ऐसा करने का बेवकूफ तरीका है, लेकिन आप जावा में जो भी करेंगे, वैसे ही आप' क्लास 'ऑब्जेक्ट्स को पास कर सकते हैं:' def readValue [टी] (एस: स्ट्रिंग, सीएलएस: क्लास [ टी]): टी' - परिभाषा, 'readValue ("1.0", classOf [डबल]) '- उपयोग। यह मूर्खतापूर्ण नहीं है, लेकिन कभी-कभी सहायक भी हो सकता है। –

2
  • द्वितीय।

    trait ValueReader[T] { 
        def readValue(s: String): T 
    } 
    
    def readValue[T: ValueReader](s: String): T = { 
        val reader = implicitly[ValueReader[T]] 
        reader.readValue(s) 
    } 
    
    implicit val doubleReader = new ValueReader[Double] { 
        def readValue(s:String) = // implementation for Double 
    } 
    
संबंधित मुद्दे