For example, FastUtil's IntArrayList
has a push
method that accepts both int
(primitive) and Integer
(boxed), but Kotlin sees these both as the same function push(Int)
, therefore I cannot use the function at all as the function is ambiguous.
What should I do when a Java library has overloads for both the primitive and boxed type?
(p.s. I am aware that I can use the add(int)
method. I am in search of what to do if I come across such a problem in the future.)
Consider these methods in Java:
void f(int x) { }
void f(Integer y) { }
In Kotlin, they are seen as
f(x: Int)
f(x: Int!)
The second method has a parameter of platform type, meaning it might be nullable, corresponding to Integer
.
First one can be simply called with Kotlin Int
passed:
f(5) // calls f(int x)
To call the second one, you can cast the argument to nullable Int?
, thus selecting the overload:
f(5 as Int?) // calls f(Integer y)
Have you tried writing a Java class to serve as an intermediary? That is, write your own java class with the method you want Kotlin to see, then call that method from your Kotlin code.