Inspired by another question.
In fastutil
library there's IntArrayList
class which has a method with the following Java signature:
public void push(Integer o)
From Kotlin it is seen as
push(o: Int)
Is there a specific reason why it is Int
and not platform type Int!
?
I expected it to be push(o: Int!)
at least because a method with the same signature defined in Java source within the project with Kotlin sources has Int!
as parameter type seen from Kotlin (even defined in different module, and even imported from jar of that module!).
Also, the described behavior causes push(Integer o)
to conflict with push(int o)
(in the same class) which has Int
parameter legally -- they are both seen as push(o: Int)
. If there was Int!
for Integer
, there would be no conflict (I tried also to define this pair of methods in my code -- still works as I expect, there's Int!
).
Kotlin version is 1.0.2
.
Gradle dependency for fastutil
:
compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'
I suspect that it is a kotlin compiler bug. Problem here is in interface
IntStack
which is implemented byIntArrayList
:Kotlin sees only one method
push(Int)
in interfaceIntStack
, or, more precisely, kotlin wrongly supposes thatpush(int i)
is an override of methodpush(T t)
.