gpt4 book ai didi

android - Kotlin : Casting an object to Generic class

转载 作者:搜寻专家 更新时间:2023-11-01 09:21:17 25 4
gpt4 key购买 nike

如何获取通用类的类型并将对象转换为它?

我想用这个函数来传递一个接口(interface)类:

protected fun <T> getInteraction(): T {
return when {
context is T -> context
parentFragment is T -> parentFragment as T
else -> throw IllegalArgumentException("not implemented interaction")
}
}

并像这样使用它:

 private var interaction: ISigninInteraction? = null

override fun onAttach(context: Context?) {
super.onAttach(context)
interaction = getInteraction<ISigninInteraction>()

}

最佳答案

Kotlin、Java 和 JVM 在实现泛型时确实有类型删除。泛型在字节码级别是不可见的。这意味着,您不能使用类型参数,例如T , 直接在函数代码中。

Kotlin 添加了对 reified 的支持泛型,这在这里有帮助。您可以像这样声明函数

inline fun <reified T> getIt() : T {
...
}

reified的帮助下和 inline可以转换为 T并归还它。 https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters

第二种选择是遵循 Java 实践 - 添加 Class<T>函数的参数并使用 Class#cast转换到T反而。

您可以结合 reified inline使用如下方法运行:

inline fun <reified T> getIt() = getIt(T::class.java)

关于android - Kotlin : Casting an object to Generic class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55141835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com