Generics 如何在Kotlin中约束泛型类型?

Generics 如何在Kotlin中约束泛型类型?,generics,kotlin,Generics,Kotlin,我正在创建一个接受水果的反应流 // PublishSubject is part of RxJava library. It accepts a generic T class PublishSubject<T> { ... } val stream = PublishSubject<Fruit>.create() 可食用行为界面可以应用于其他食品(冰淇淋、土豆),但是,我只想要可食用的水果 val stream = PublishSubject<Fru

我正在创建一个接受水果的反应流

// PublishSubject is part of RxJava library. It accepts a generic T
class PublishSubject<T> {
   ...
}

val stream = PublishSubject<Fruit>.create()
可食用行为界面可以应用于其他食品(冰淇淋、土豆),但是,我只想要可食用的水果

val stream = PublishSubject<Fruit : Edible>.create()
val stream=PublishSubject.create()
像这样的,但这似乎不起作用

在实例化泛型时,是否可以进一步约束泛型,而无需子类化
PublishSubject

我可以接受所有的食物,并做一些黑客过滤,但这似乎并不正确
PublishSubject.create().filter(可食用->可食用是水果)
您可以使用
where
这样的关键字:

class PublishSubject<T> where T : Fruit, T : Edible {
    ...
}
类PublishSubject,其中T:水果,T:可食用{
...
}

我不想将PublishSubject子类化。它是RxJava库的一部分。(我刚刚在我的帖子中添加了评论)我担心在Kotlin中实现这一点的唯一方法是使用某种
EdibleFruit
,不幸的是,Kotlin不支持交叉点类型。不过,您可以通过使用包装器类型来解决这个问题,就像我在这个答案中概述的那样:
class PublishSubject<T> where T : Fruit, T : Edible {
    ...
}