为什么 Kotlin 接口是 "not open"?

Why are Kotlin interfaces "not open"?

在 Kotlin 1.4.30 中,当我输入时

open interface I

Kotlin 编译器警告我 modifier 'open' is redundant for 'interface'。这是完全有道理的:接口当然是开放的,否则就没用了。

然而,反射库似乎与此矛盾:

interface I
println(I::class.isOpen) // prints 'false'

这有什么意义? KDoc of isOpen 非常简短:

true if this class is open.

Kotlin 中“开放”的定义到底是什么? 我认为它的意思是“允许在这个文件之外被 类 子类型化的可能性”。

方法 isFinalisOpenisAbstractisSealed 的设计使得其中只有一个 returns 对所有 KClass 个实例。

来源:this comment in KT-19850.

由于接口是抽象的,I::class.isAbstract == true。结合以上设计目标,I::class.isOpen == false结果

请投票 KT-19850 以帮助解决这个令人惊讶的行为。