如何在 Kotlin 中使用“where”并同时扩展另一个(通用)类?

问题描述 投票:0回答:1

我有两个接口,

Foo
Bar
,并且我有一个类
Baz<T : Foo>
。我想创建一个扩展
Buz<T>
的新类
Baz
,其中
Buz
的类型参数扩展
Foo
Bar
。所以它看起来像这样:

interface Foo
interface Bar

class Baz<T : Foo>
// doesn't work
class Buz<T> where T : Foo, T : Bar : Baz<T>

在 Kotlin 中执行此操作的实际方法是什么?

kotlin generics
1个回答
0
投票
  • 继承子句位于
    where ...
    类型约束之前。
  • 您需要通过在
    ()
    之后添加
    Baz<T>
    来调用超类构造函数。
  • Baz<T>
    必须是
    open
    才能允许其他类继承它。

所以你应该这样做:

open class Baz<T : Foo>

class Buz<T> : Baz<T>() where T : Foo, T : Bar
© www.soinside.com 2019 - 2024. All rights reserved.