例如,FastUtil的IntArrayList有一个push方法,可以同时接受int(原始)和Integer(带盒装),但是Kotlin认为这两者是同一个函数push(Int),因此由于该函数模棱两可,因此我根本无法使用该函数。

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

(请注意,我知道我可以使用add(int)方法。我正在寻找将来遇到此类问题时该怎么做。)

最佳答案

考虑一下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)

要调用第二个参数,可以将参数强制转换为可为null的Int?,从而选择重载:
f(5 as Int?) // calls f(Integer y)

关于Kotlin:当Java库同时具有原始类型和盒装类型的重载时,我该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37625599/

10-17 01:49