具有可相交类型的类型别名

Use*_*291 5 kotlin

假设我有一个界面HasId和另一个HasResponsiblePerson. 我现在对实现这两者的实例感兴趣。

IE

typealias AssignableEntity = HasId & HasResponsiblePerson

class Foo {

   val entity: AssignableEntity
}
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为

交集类型仅支持绝对不可为 null 的类型:左侧部分应该是具有可为 null 边界的类型参数

当然,我可以定义一个新接口

interface AssignableEntity: HasId, HasResponsiblePerson
Run Code Online (Sandbox Code Playgroud)

但每次遇到我感兴趣的新接口组合时,我都必须定义新接口,最终会得到大量几乎无用的接口。

有办法做我想做的事吗?

Jof*_*rey 6

目前 Kotlin 中无法表示交集和并集类型: https ://youtrack.jetbrains.com/issue/KT-13108

正如该消息告诉您的那样,朝这个方向迈出的第一步是为了T & Any表示绝对不可为空的类型,但它尚不适用于一般的交叉点。

同时,您可以使用专用接口、传递多个参数或返回复合类,如 @Ivo 建议的那样。