11

这可能是一个非常愚蠢的问题,但我在玩 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>(至少这是我所期望的)。

我的想法是否存在严重缺陷,对此是否有完全合理的解释?

或者

我的 Scala 代码中是否存在问题,在我知道会为 Java 代码提供 API 的情况下,有一种更...明确的方法吗?

或者

这仅仅是一个限制吗?

4

1 回答 1

9

Int是 Scala 的整数类型,它是一个值类,所以它得到特殊处理。它不同于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();
}
于 2012-04-20T14:54:21.147 回答