例如,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/