2012-04-20 29 views
11

यह शायद एक बहुत ही नोबिश सवाल है, लेकिन मैं स्कैला/जावा इंटरैक्शन के साथ थोड़ा सा खेल रहा था, और सोच रहा था कि टुपल्स कितनी अच्छी तरह से खेलते थे।जावा में स्कैला टुपल प्रकार अनुमान

अब, मुझे पता है कि (Type1, Type2) वाक्य रचना Tuple2<Type1, Type2> के लिए केवल वाक्यात्मक चीनी है, और इसलिए, जब एक स्काला विधि है कि एक सादे जावा वर्ग में एक Tuple2 रिटर्न बुला, मैं Tuple2<Type1, Type2>

की वापसी प्रकार प्राप्त करने के लिए उम्मीद कर रहा था

स्पष्टता के लिए, मेरी स्काला कोड:

def testTuple:(Int,Int) = (0,1) 

जावा कोड:

Tuple2<Object,Object> objectObjectTuple2 = Test.testTuple(); 

ऐसा लगता है संकलक थी उम्मीद पैरामीटर प्रकार <Object,Object> के बजाय, मेरे मामले में, <Integer,Integer> (यह वही है जो मैं अपेक्षा कर रहा था)।

क्या मेरी सोच गहराई से त्रुटिपूर्ण है और क्या इसके लिए एक बिल्कुल उचित स्पष्टीकरण है?

या

मेरे स्काला कोड में एक समस्या है, और वहाँ मामलों है कि मैं जानता हूँ कि जावा कोड के लिए एक API प्रदान करेगा में और अधिक ... स्पष्ट होने का एक तरीका है,?

या

क्या यह केवल एक सीमा है?

उत्तर

9

Int स्कैला का पूर्णांक प्रकार है, जो is a value class है, इसलिए यह विशेष उपचार प्राप्त करता है। यह java.lang.Integer से अलग है। आप java.lang.Integer निर्दिष्ट कर सकते हैं विशेष रूप से यदि आपको वही चाहिए।

[[email protected] scala]$ cat SomeClass.scala 
class SomeClass { 
    def testIntTuple: (Int, Int) = (0, 1) 
    def testIntegerTuple: (java.lang.Integer, java.lang.Integer) = (0, 1) 
} 

[[email protected] scala]$ javap SomeClass 
Compiled from "SomeClass.scala" 
public class SomeClass implements scala.ScalaObject { 
    public scala.Tuple2<java.lang.Object, java.lang.Object> testIntTuple(); 
    public scala.Tuple2<java.lang.Integer, java.lang.Integer> testIntegerTuple(); 
    public SomeClass(); 
} 
+0

तो, 'Int' सामान्य स्कैला वर्ग नहीं है? (यदि ऐसा होगा, तो 'Int' संस्करण को' scalaTuple2 'या कुछ समान, संकलित किया जाना चाहिए था? – aioobe

+1

सही। [स्केलडॉक्स] से (http://www.scala-lang.org/api/current/scala/Int.html): "' Int' मूल्य वर्गों का सदस्य है, जिनके उदाहरण वस्तुओं के रूप में प्रदर्शित नहीं होते हैं अंतर्निहित मेजबान प्रणाली। " [एकीकृत प्रकारों का वर्णन करने वाला पृष्ठ] (http://docs.scala-lang.org/tutorials/tour/unified_types.html) इसे बेहतर समझा सकता है। – leedm777

+0

ग्रेट उत्तर @ डेव, धन्यवाद, यह सही समझ में आता है क्योंकि इंट को जादुई रूप से जावा क्लास में अनुवादित नहीं किया जा सकता है, मुझे लगता है कि इसे इंटीजर में अनुवादित किया जाएगा। – pcalcao

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