例如,FastUtil的IntArrayList拥有一个push方法,可以接受int(基本类型)和Integer(装箱类型),但是Kotlin将它们都视为相同的函数push(Int),因此我无法使用该函数,因为该函数是模棱两可的。当Java库同时支持基本数据类型和包装类型时,我该怎么办呢?
(注:我知道我可以使用add(int)方法。我正在寻找未来遇到此类问题时应该怎么做。)
(注:我知道我可以使用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类作为中介吗?也就是说,编写自己的Java类,其中包含您想让Kotlin看到的方法,然后从Kotlin代码中调用该方法。
x
是一个Int
):http://i.imgur.com/KLVy5Vn.png - Jirepush(Integer)
,由于某些原因Kotlin签名是push(Int)
而不是push(Int!)
。 - hotkeyv1.0.3
版本中不起作用,但显然在v1.1-M01
版本上可以工作。 - Enno Shioji