【问题标题】:Kotlin java interoperability is possible with default parameters but not with named parameters, why so?Kotlin java 互操作性可以使用默认参数,但不能使用命名参数,为什么会这样?
【发布时间】:2021-09-20 18:13:45
【问题描述】:

使用注释的默认参数可以实现 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?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    Java 不支持命名参数 - 这很简单。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2013-05-31
      • 2018-07-09
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多