Ispirato a another question.Perché il parametro Integer del metodo Java è mappato su Int e non sul tipo di piattaforma?
In fastutil
biblioteca c'è IntArrayList
classe che ha un metodo con la seguente firma Java:
public void push(Integer o)
Da Kotlin è visto come
push(o: Int)
C'è una ragione specifica per cui è Int
e non il tipo di piattaforma Int!
?
ho aspettato che fosse push(o: Int!)
almeno perché un metodo con la stessa firma definito nella sorgente Java all'interno del progetto con sorgenti Kotlin ha Int!
come tipo di parametro visto da Kotlin (anche definito nel modulo diverso, e anche importata da vaso di quel modulo!).
Inoltre, il comportamento descritto provoca push(Integer o)
in contrasto con push(int o)
(nella stessa classe) che ha Int
parametro legalmente - entrambi sono visti come push(o: Int)
. Se ci fosse Int!
per Integer
, non ci sarebbe conflitto (ho provato anche a definire questa coppia di metodi nel mio codice - funziona ancora come mi aspetto, c'è Int!
).
La versione di Kotlin è 1.0.2
.
Gradle dipendenza per fastutil
:
compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'
Problema correlato: https://youtrack.jetbrains.com/issue/KT-11440 – erokhins