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

Jir*_*ire 8 overloading kotlin

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

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

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

hot*_*key 9

在Java中考虑这些方法:

void f(int x) { }
void f(Integer y) { }
Run Code Online (Sandbox Code Playgroud)

在Kotlin,他们被视为

f(x: Int)
f(x: Int!)
Run Code Online (Sandbox Code Playgroud)

第二种方法有一个平台类型的参数,这意味着它可以是可空的,对应于Integer.

第一个可以通过Kotlin Int通过简单调用:

f(5) // calls f(int x)
Run Code Online (Sandbox Code Playgroud)

要调用第二个,可以将参数转换为可为空Int?,从而选择重载:

f(5 as Int?) // calls f(Integer y)
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案不适用于`v1.0.3`,但显然适用于`v1.1-M01` (2认同)

use*_*560 1

您是否尝试过编写一个 Java 类来充当中介?也就是说,使用您希望 Kotlin 查看的方法编写您自己的 java 类,然后从您的 Kotlin 代码中调用该方法。

  • 这是一个可行的解决方案,但您是否怀疑还有更简单的方法? (2认同)