Kotlin - 对类型参数施加限制

Kotlin - Put restriction on type parameter

假设我们有一个摘要class

abstract class BaseFragment

此外,我想在BaseFragment上添加一个类型参数class,像这样

abstract class BaseFragment<T>

现在,这里是我开始 运行 问题的地方 - 我想对 T 施加限制,即,我希望 T 成为 T 的子类型基础片段。然而,当我写

abstract class BaseFragment<T: BaseFragment>

我遇到编译错误:

One type argument expected for class BaseFragment

我该如何解决这个问题?我试过 BaseFragment<out T: BaseFragment>
BaseFragment<T: BaseFragment<*>> 但这似乎也不起作用...

您必须指定 BaseFragment 的类型范围。 <*> 不起作用,因为那样的话就没有什么可以满足条件了。您可以使用

abstract class BaseFragment<T: BaseFragment<T>>

子类可以“推卸责任”:

open class Foo<T: BaseFragment<T>>: BaseFragment<T>()
//or
open class Bar<T: Bar<T>>: BaseFragment<T>()

或自己满足子类型要求:

class Baz: BaseFragment<Baz>()