这可能是一个非常愚蠢的问题,但我在Scala / Java互动方面有点玩,并且想知道Tuples的表现如何。
现在,我知道(Type1, Type2)
语法只是Tuple2<Type1, Type2>
的语法糖,因此,当调用在普通Java类中返回Tuple2的Scala方法时,我希望得到一个返回类型Tuple2<Type1, Type2>
为清楚起见,我的Scala代码:
def testTuple:(Int,Int) = (0,1)
Java代码:
Tuple2<Object,Object> objectObjectTuple2 = Test.testTuple();
编译器似乎希望这是参数化类型<Object,Object>
,而不是在我的情况下,<Integer,Integer>
(这是我期望的,至少)。
我的想法是否存在严重缺陷,是否有完全合理的解释?
OR
我的Scala代码中是否存在问题,并且在我知道将为Java代码提供API的情况下,有一种更明确的方式吗?
OR
这只是一个限制吗?
答案 0 :(得分:9)
Int
是Scala的整数类型,is a value class,所以它得到特殊处理。它与java.lang.Integer
不同。如果您需要,可以专门指定java.lang.Integer
。
[dlee@dlee-mac scala]$ cat SomeClass.scala
class SomeClass {
def testIntTuple: (Int, Int) = (0, 1)
def testIntegerTuple: (java.lang.Integer, java.lang.Integer) = (0, 1)
}
[dlee@dlee-mac 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();
}