Примитивное преобразование из Котлина в Яву - PullRequest
2 голосов
/ 02 июня 2019

При попытке вызвать метод 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 ]

2 голосов
/ 02 июня 2019

По данным 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?

Это означает, что вы можете просто бросить в nullable kotlin. Double? и использовать вашу цель Java изначально.

0 голосов
/ 02 июня 2019

Если бы AuthRequestModel был классом Java, вы не смогли бы использовать именованные параметры для вызова его конструктора.Я предполагаю, что AuthRequestModel - это класс Kotlin, который был плохо переведен на Kotlin.Исправьте перевод так, чтобы он использовал простой Double или Double?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...