首页 > 解决方案 > 无法使用 KClass<> 推断抽象类构造函数中的类型

问题描述

我正在尝试制作一个抽象的基础片段并在其中初始化视图。

abstract class BaseFrag<V: View>(private val clazz: KClass<V>) : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? =
            clazz.constructors.firstOrNull()?.call(context)
}

这就是我可以用它初始化片段的方式:class HomeFrag : BaseFrag<HomeView>(HomeView::class)

有没有办法让 HomeView 推断并输入class HomeFrag : BaseFrag(HomeView::class)

标签: androidandroid-fragmentskotlingenerics

解决方案


out使用修饰符尝试这种方法:

abstract class BaseFrag(private val clazz: KClass<out View>) : Fragment() { ... }

class HomeFrag : BaseFrag(HomeView::class)

推荐阅读