Kotlin将字符串转换为泛型类型

vc9ivgsu  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(232)

我想从input中读取一行并将其转换为泛型类型。

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

所以对于R(),它将调用toInt(),对于long toLong()等等,如何实现这样的事情?顺便问一下,如果你想提供一个默认的泛型类型,有没有可能有一个默认的泛型类型(C++有)

vvppvyoh

vvppvyoh1#

可以用具体化的类型参数编写泛型inline function

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")
    }
}

具体化类型参数用于访问传递参数的类型。
调用函数:

val resultString = read<String>()
try {
    val resultInt = read<Int>()
} catch (e: NumberFormatException) {
    // make sure to catch NumberFormatException if value can't be cast
}

相关问题