Questa è probabilmente una domanda molto noobish, ma stavo giocando un po 'con l'interazione Scala/Java, e mi chiedevo quanto bene suonasse Tuples.Inferenza tipo Tuple Scala in Java
Ora, so che la sintassi (Type1, Type2)
è lo zucchero meramente sintattico per Tuple2<Type1, Type2>
, e così, quando si chiama un metodo Scala che restituisce un Tuple2 in una classe Java semplice, mi aspettavo di ottenere un tipo di ritorno di Tuple2<Type1, Type2>
Per chiarezza, il mio codice Scala: codice
def testTuple:(Int,Int) = (0,1)
Java:
Tuple2<Object,Object> objectObjectTuple2 = Test.testTuple();
sembra che il compilatore si aspetta Thi s di tipi parametrizzati <Object,Object>
, anziché, nel mio caso, <Integer,Integer>
(questo è quello che mi aspettavo, almeno).
Il mio pensiero è profondamente errato e c'è una spiegazione perfettamente ragionevole per questo?
O
C'è un problema nel mio codice Scala, e c'è un modo di essere più ... esplicita, nei casi che conosco fornirà un'API per il codice Java?
O
Questa è semplicemente una limitazione?
Quindi, 'Int' non è una normale classe di Scala? (Se lo fosse, la versione 'Int' dovrebbe essere stata compilata in' scalaTuple2 'o qualcosa di simile, no?) –
aioobe
Corretto. Da [gli scaladoc] (http://www.scala-lang.org/api/current/scala/Int.html): "' Int' è un membro delle classi di valore, quelle le cui istanze non sono rappresentate come oggetti da il sistema host sottostante. " La [pagina che descrive i tipi unificati] (http://docs.scala-lang.org/tutorials/tour/unified_types.html) potrebbe spiegarlo meglio. – leedm777
Ottima risposta @dave, grazie, che ha perfettamente senso dal momento che Int non può essere tradotto magicamente in una classe Java, presumevo che sarebbe stato tradotto in Integer. – pcalcao