KOTLIN преобразовать строку в общий c тип - PullRequest
2 голосов
/ 25 мая 2020

Я хочу прочитать строку из ввода и преобразовать ее в общий тип c. что-то вроде

fun <T> R() : T {
  return readLine()!!.toType(T)
}

, поэтому для R () он будет долго вызывать toInt () toLong () et c. как этого добиться? И, кстати, есть ли возможность иметь тип generi c по умолчанию (у C ++ он есть), если вы хотите предоставить один

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы можете написать generi c встроенную функцию с параметром reified type :

inline fun <reified T> read() : T {
    val value: String = readLine()!!
    return when (T::class) {
        Int::class -> value.toInt() as T
        String::class -> value as T
        // add other types here if need
        else -> throw IllegalStateException("Unknown Generic Type")
    }
}

Параметр Reified type используется для доступа к типу переданного параметра .

Вызов функции:

val resultString = read<String>()
try {
    val resultInt = read<Int>()
} catch (e: NumberFormatException) {
    // make sure to catch NumberFormatException if value can't be cast
}
0 голосов
/ 25 мая 2020

Вы можете просто проверить T-тип: если int - преобразовать в int, если long преобразовать в long. И прочтите о ключевых словах "out" и "refied"

...