是否可以使用返回泛型类型的函数?就像是:
fun <T> doSomething() : T {
when {
T is Boolean -> somethingThatReturnsBoolean()
T is Int -> somethingThatReturnsInt()
else -> throw Exception("Unhandled return type")
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用reified类型来捕获其类文字,如下所示:
inline fun <reified T> doSomething() : T {
return when (T::class.java) {
Boolean::class.java -> somethingThatReturnsBoolean() as T
Int::class.java -> somethingThatReturnsInt() as T
else -> throw Exception("Unhandled return type")
}
}
Run Code Online (Sandbox Code Playgroud)
但是你也必须说服编译器T是布尔值,或者T是Int,就像在示例中一样,使用未经检查的强制转换.
reified
使真实T类型可访问,但仅适用于内联函数.如果您想要常规功能,可以尝试:
inline fun <reified T> doSomething() : T = doSomething(T::class.java)
fun <T> doSomething(klass: Class<T>): T {
return when (klass) { ... }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2180 次 |
最近记录: |