从 Kotlin 到 Java 的原始转换



当尝试调用接受以下类型的java方法(在本例中为构造函数(时:java.lang.Double?

示例(AuthRequestModel 是一个 Java 模态(:

AuthRequestModel(amount = 10.toDouble())

解决错误:

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

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

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

小鬼:

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

用法:

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

但这是强制铸造,我认为有一种原生方法可以实现相同的结果......

根据 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。双?并在本地使用您的 Java 目标。

如果AuthRequestModel是一个 Java 类,您将无法使用命名参数来调用其构造函数。我的猜测是,AuthRequestModel是一个 Kotlin 类,但翻译成 Kotlin 的效果很差。修复翻译,使其使用普通DoubleDouble?

最新更新