Kotlin java互操作性与默认参数是可能的,但不与命名参数,为什么这样?



Kotlin java互操作性与使用注释的默认参数是可能的,即

@JvmOverloads

示例,我可以从Java类调用这个Kotlin函数。

@JvmOverloads
int findVolume(length:Int, breadth:Int, height:Int = 20): Int {
retrun length*breadth*height
}

//从Java类调用。

KotlingFileName.findVolume(5, 10)// No problem here, possible, third param is optional

但是对于命名形参则不可能。

@JvmOverloads
int findVolume(length:Int, breadth:Int, height:Int = 20): Int 
{
retrun length*breadth*height
}

//从Java调用

KotlingFileName.findVolume(length=5,breadth= 10, height=20) // Not possible, why?

Java不支持命名参数——这是最简单的。

默认参数由生成的字节码容纳。Kotlin编译器使用默认参数生成该方法的多个版本。您的示例调用Java方法的三个参数版本,其中第三个参数分配给默认参数。

最新更新