Kotlin Type Mismatch для функции, возвращающей строку - PullRequest
0 голосов
/ 11 октября 2018
import java.util.UUID

fun UuidGenerator() {
    val id =  UUID.randomUUID().toString();
    return id.replace("-", "")
}

^^^ UuidGenerator.kt

Просто попробуйте создать простую функцию генератора UUI, чтобы я мог импортировать ее в класс и использовать ее для генерации случайной строки из 32 символов, но при этом получаю типнесоответствие.

enter image description here

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Все функции в Kotlin возвращают значение (поэтому в Kotlin мы называем их функциями, а не методами).Если вы не укажете явно, возвращаемое значение Unit будет возвращено неявно.Поэтому ваш код:

fun UuidGenerator() {
    val id =  UUID.randomUUID().toString();
    return id.replace("-", "")
}

можно переписать в виде:

fun UuidGenerator(): Unit {
    val id =  UUID.randomUUID().toString();
    return id.replace("-", "")
    // ^^^--- oops, won't work
    return Unit
}

Если вы посмотрите на его источник, то будет иметь смысл:

/**
 * The type with only one value: the Unit object.
 * This type corresponds to the `void` type in Java.
 */
public object Unit {
    override fun toString() = "kotlin.Unit"
}

Этоэто умный трюк, чтобы покончить с void.

Теперь, что вы действительно хотите сделать, это указать, что вы возвращаете String:

fun UuidGenerator(): String {
    val id =  UUID.randomUUID().toString();
    return id.replace("-", "")
}
0 голосов
/ 13 октября 2018

Как уже упоминалось в комментарии, если вы хотите использовать вывод типа Kotlin, вам не нужно указывать тип возвращаемого значения, вы можете определить функцию как однострочную

fun UuidGenerator() = UUID.randomUUID().toString().replace("-", "")
0 голосов
/ 11 октября 2018

Вам необходимо указать возвращаемый объект : String

fun UuidGenerator() : String {
   val id =  UUID.randomUUID().toString()
   return id.replace("-", "")
}
...