Jest to prawdopodobnie bardzo nieobowiązkowe pytanie, ale grałem trochę z interakcją Scala/Java i zastanawiałem się, jak dobrze krotki grają.Wnioskowanie typu Scala Tuple w Javie
Teraz wiem, że składnia (Type1, Type2)
jest cukier jedynie składniowym dla Tuple2<Type1, Type2>
, a więc, gdy wywołanie metody Scala zwracającą Tuple2 w zwykły klasy Java, spodziewałem się dostać typ zwracanej Tuple2<Type1, Type2>
Dla jasności, mój kod Scala: Kod
def testTuple:(Int,Int) = (0,1)
Java:
Tuple2<Object,Object> objectObjectTuple2 = Test.testTuple();
wydaje kompilator spodziewa jes s to sparametryzowane typy <Object,Object>
, zamiast, w moim przypadku, <Integer,Integer>
(tego właśnie oczekiwałem, przynajmniej).
Czy moje myślenie jest głęboko błędne i czy istnieje całkowicie uzasadnione wytłumaczenie tego?
LUB
Czy jest jakiś problem w moim kodu Scala, a tam sposobem bycia bardziej ... wyraźny, w przypadkach, które znam dostarczy API dla kodu Java?
LUB
Czy to po prostu ograniczenie?
Więc "Int" nie jest zwykłą klasą Scala? (Jeśli tak, to wersja 'Int' powinna zostać skompilowana w' scalaTuple2 'lub coś podobnego, nie?) –
aioobe
Prawidłowo. Od [the scaladocs] (http://www.scala-lang.org/api/current/scala/Int.html): "' Int' jest członkiem klas wartości, których instancje nie są reprezentowane jako obiekty przez podstawowy system hosta. " Strona [opisująca typy zunifikowane] (http://docs.scala-lang.org/tutorials/tour/unified_types.html) może lepiej to wyjaśnić. – leedm777
Świetna odpowiedź @dave, dziękuję, to ma sens, ponieważ Int nie może być magicznie przetłumaczone na klasę Java, zakładałem, że zostanie przetłumaczone na Integer. – pcalcao