¿Por qué el parámetro Integer del método Java está correlacionado con Int y no con el tipo de plataforma?

Inspirado por otra pregunta .

En la biblioteca fastutil existe la class IntArrayList que tiene un método con la siguiente firma Java:

 public void push(Integer o) 

Desde Kotlin se ve como

 push(o: Int) 

¿Hay alguna razón específica por la cual es Int y no tipo de plataforma Int! ?

Esperaba que fuera push(o: Int!) Al less porque un método con la misma firma definida en fuente Java dentro del proyecto con fonts de Kotlin tiene Int! como tipo de parámetro visto desde Kotlin (¡incluso definido en un module diferente, e incluso importado del jar de ese module!).

Además, el comportamiento descrito hace que push(Integer o) en conflicto con push(int o) (en la misma class) que tiene el parámetro Int legalmente – ambos se ven como push(o: Int) . Si hubo Int! para Integer , no habría conflicto (traté también de definir este par de methods en mi código, todavía funciona como esperaba, ¡hay Int! ).


La versión de Kotlin es 1.0.2 .

Dependencia de fastutil para fastutil :

 compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12' 

    Sospecho que es un error del comstackdor de kotlin. El problema aquí está en la interfaz IntStack que implementa IntArrayList :

     interface Stack<T> { void push(T t); } interface IntStack extends Stack<Integer> { void push(int i); } 

    Kotlin solo ve un método push(Int) en la interfaz IntStack , o, más precisamente, kotlin supone erróneamente que push(int i) es una anulación del método push(T t) .