例如,FastUtil的IntArrayList
有一个push
方法同时接受int
(原始)和Integer
(盒装),但Kotlin认为这两者都是作为相同的函数push(Int)
,因此我根本不能使用该函数,因为函数是模糊的。
当Java库对基本类型和盒装类型都有重载时,我该怎么办?
(p.s。我知道我可以使用add(int)
方法。如果我将来遇到这样的问题,我正在寻找该怎么做。)
答案 0 :(得分:9)
在Java中考虑这些方法:
void f(int x) { }
void f(Integer y) { }
在Kotlin,他们被视为
f(x: Int)
f(x: Int!)
第二种方法的参数为platform type,意味着可能可以为空,对应Integer
。
第一个可以通过Kotlin Int
通过简单调用:
f(5) // calls f(int x)
要调用第二个,可以将参数强制转换为可空Int?
,从而选择重载:
f(5 as Int?) // calls f(Integer y)
答案 1 :(得分:1)
您是否尝试过编写Java类作为中介?也就是说,用您希望Kotlin看到的方法编写自己的java类,然后从您的Kotlin代码中调用该方法。