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-кода?
ИЛИ
Это просто ограничение?
Ответы
Ответ 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();
}