Подтвердить что ты не робот

Scala Вывод типа Tuple в Java

Это, вероятно, очень нубийский вопрос, но я немного играл с взаимодействием Scala/Java и задавался вопросом, насколько хорошо играли Tuples.

Теперь я знаю, что синтаксис (Type1, Type2) - это просто синтаксический сахар для Tuple2<Type1, Type2>, и поэтому при вызове метода Scala, который возвращает Tuple2 в простом Java-классе, я ожидал получить тип возврата of Tuple2<Type1, Type2>

Для ясности мой Scala код:

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

Код Java:

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

Кажется, компилятор ожидает, что это будет параметризованные типы <Object,Object>, а не в моем случае <Integer,Integer> (это то, чего я ожидал, по крайней мере).

Неужели мое мышление глубоко ошибочно и есть ли для этого разумное объяснение?

ИЛИ

Есть ли проблема в моем коде Scala, и есть способ быть более... явным, в тех случаях, когда я знаю, предоставит API для Java-кода?

ИЛИ

Это просто ограничение?

4b9b3361

Ответ 1

Int - это Scala целочисленный тип, который является классом значений, поэтому он получает специальное обращение. Он отличается от 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();
}