【问题标题】:Kotlin - Put restriction on type parameterKotlin - 对类型参数施加限制
【发布时间】:2021-02-21 12:04:12
【问题描述】:

假设我们有一个抽象类

abstract class BaseFragment

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

abstract class BaseFragment<T>

现在,这是我开始遇到问题的地方 - 我想对 T 施加限制,即我希望 T 成为 BaseFragment 的子类型。但是,当我写

abstract class BaseFragment<T: BaseFragment>

我得到一个编译错误:

类 BaseFragment 需要一个类型参数

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

【问题讨论】:

  • 仅仅限制在BaseFragment 是没有意义的。你需要给它一个泛型类型参数。你允许使用任何类型的BaseFragment,还是只允许BaseFragment&lt;T&gt;

标签: kotlin generics type-parameter


【解决方案1】:

您必须指定BaseFragment 的类型界限。 &lt;*&gt; 不起作用,因为没有什么可以满足条件。你可以使用

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>()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2021-06-27
    • 2017-11-17
    相关资源
    最近更新 更多