Probablemente esta sea una pregunta muy novata, pero estaba jugando un poco con la interacción Scala/Java, y me preguntaba qué tan bien jugaron las Tuplas.Inferencia de tipo Scala Tuple en Java
Ahora, sé que la sintaxis (Type1, Type2)
es el azúcar meramente sintáctica para Tuple2<Type1, Type2>
, y así, cuando se llama a un método Scala que devuelve un Tuple2 en una clase Java normal, esperaba conseguir un tipo de retorno de Tuple2<Type1, Type2>
Para mayor claridad, mi código Scala: código
def testTuple:(Int,Int) = (0,1)
Java:
Tuple2<Object,Object> objectObjectTuple2 = Test.testTuple();
parece que el compilador espera Thi s de tipos parametrizados <Object,Object>
, en lugar de, en mi caso, <Integer,Integer>
(esto es lo que esperaba, al menos).
¿Es mi pensamiento profundamente defectuoso y hay una explicación perfectamente razonable para esto?
O
¿Hay algún problema en mi código Scala, y hay una manera de ser más explícita ..., en los casos que sé que van a proporcionar una API para código Java?
O
¿Es esto simplemente una limitación?
Entonces, 'Int' no es una clase ordinaria de Scala? (Si fuera así, la versión 'Int' debería haberse compilado en' scalaTuple2 'o algo similar, ¿no?) –
aioobe
Correcto. De [los scaladocs] (http://www.scala-lang.org/api/current/scala/Int.html): "' Int' es un miembro de las clases de valores, aquellos cuyas instancias no están representadas como objetos por el sistema host subyacente ". La [página que describe los tipos unificados] (http://docs.scala-lang.org/tutorials/tour/unified_types.html) puede explicarlo mejor. – leedm777
Excelente respuesta @dave, gracias, tiene mucho sentido ya que Int no se puede traducir mágicamente a una clase de Java, supongo que se traducirá a Entero. – pcalcao