具有泛型返回类型的函数

是否有可能返回一个泛型类型的函数? 就像是:

fun <T> doSomething() : T { when { T is Boolean -> somethingThatReturnsBoolean() T is Int -> somethingThatReturnsInt() else -> throw Exception("Unhandled return type") } } 

你可以使用reified类型,像这样:

 inline fun <reified T> doSomething() : T { when (T::class.java) { Boolean::class.java -> somethingThatReturnsBoolean() Int::class.java -> somethingThatReturnsInt() else -> throw Exception("Unhandled return type") } } 

它使真正的T类型可访问,但只适用于内联函数。 如果你想要一个常规的功能,你可以尝试:

 inline fun <reified T> doSomething() : T = doSomething(T::class.java) fun <T> doSomething(klass: Class<T>) { ... }