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

时间:2016-06-04 01:52:18

标签: kotlin overloading

例如,FastUtil的IntArrayList有一个push方法同时接受int(原始)和Integer(盒装),但Kotlin认为这两者都是作为相同的函数push(Int),因此我根本不能使用该函数,因为函数是模糊的。

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

(p.s。我知道我可以使用add(int)方法。如果我将来遇到这样的问题,我正在寻找该怎么做。)

2 个答案:

答案 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代码中调用该方法。