尝试调用接受以下类型的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())
但这是强制转换,我认为存在一种获得相同结果的本地方法...
答案 0 :(得分:2)
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。修正翻译,使其使用普通的Double
或Double?
。