从Kotlin到Java的原始转换

时间:2019-06-02 15:56:54

标签: java kotlin

尝试调用接受以下类型的java方法(在这种情况下为构造函数)时: java.lang.Double?

示例(AuthRequestModel是Java模式):

AuthRequestModel(amount = 10.toDouble())

解决错误:

类型不匹配。必需:Java.lang.Double?找到:Kotlin.Double

Kotlin Double(或其他任何原始类型)转换为 Java 的正确方法是什么?

现在,我添加了一种如下所示的转换方法:

Imp:

fun Double.asJava(): java.lang.Double = this as java.lang.Double

用法:

  AuthRequestModel(amount = 10.toDouble().asJava())

但这是强制转换,我认为存在一种获得相同结果的本地方法...

2 个答案:

答案 0 :(得分:2)

根据kotlinlang.org

  

Java的带框原始类型被映射为可空的Kotlin类型:

Java type              Kotlin type
java.lang.Byte         kotlin.Byte?
java.lang.Short        kotlin.Short?
java.lang.Integer      kotlin.Int?
java.lang.Long         kotlin.Long?
java.lang.Character    kotlin.Char?
java.lang.Float        kotlin.Float?
java.lang.Double       kotlin.Double?
java.lang.Boolean      kotlin.Boolean?

这意味着您可以将其转换为可空的kotlin.Double?并原生使用Java目标。

答案 1 :(得分:0)

如果AuthRequestModel是Java类,则将无法使用命名参数来调用其构造函数。我的猜测是AuthRequestModel是Kotlin的一类,而该翻译很少被翻译成Kotlin。修正翻译,使其使用普通的DoubleDouble?