Kotlin:如果Java库有原始类型和盒装类型的重载,我该怎么办?

例如,FastUtil的IntArrayList有一个接受int (primitive)和Integer (boxed)的push方法,但是Kotlin把它们看作是同一个函数push(Int) ,所以我根本不能使用这个函数,因为函数是不明确的。

当Java库对原始类型和盒装类型都有重载时,我该怎么办?

(ps我知道我可以使用add(int)方法,如果将来遇到这样的问题,我正在寻找如何处理。

在Java中考虑这些方法:

 void f(int x) { } void f(Integer y) { } 

在Kotlin,他们被视为

 f(x: Int) f(x: Int!) 

第二种方法有平台类型的参数,这意味着它可能是空的,对应于Integer

首先可以通过Kotlin Int简单地调用:

 f(5) // calls f(int x) 

要调用第二个参数,可以将参数强制转换为可空Int? ,从而选择过载:

 f(5 as Int?) // calls f(Integer y) 

你有没有尝试写一个Java类作为中介? 也就是说,用您希望Kotlin查看的方法编写您自己的Java类,然后从您的Kotlin代码中调用该方法。