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