是否可以将反射中的所有可能类型用作泛型类型?



我正在尝试使用反射来自动创建一些类的savedStateHandle

fun <T> KProperty1<T, *>.argFrom(handle: SavedStateHandle) = 
when (this.returnType.javaType) {
String::class.java -> handle.get<String>(this.name)
Int::class.java -> handle.get<Int>(this.name)
Uri::class.java -> handle.get<Uri>(this.name)
else -> throw RuntimeException("Type not implemented yet")
}

如你所见,如果类型是例如String,那么我希望get函数的返回类型是String,当这样做时,我必须手动定义每一个case。

如果我能这样做就好了。

fun <T> KProperty1<T, *>.argFrom(handle: SavedStateHandle) =
handle.get<this.returnType.javaType>(this.name)

需要一个类型参数来表示属性的返回类型。然后,您可以使用该类型参数指定所需的get返回类型:

fun <T, V> KProperty1<T, V>.argFrom(handle: SavedStateHandle) =
handle.get<V>(this.name)

相关内容

  • 没有找到相关文章

最新更新