5

在 Kotlin 1.4.30 中,当我输入

open interface I

Kotlin 编译器警告我modifier 'open' is redundant for 'interface'。这是完全有道理的:接口当然是开放的,否则它们将毫无用处。

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

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

这有什么意义?的KDocisOpen非常简短:

true如果这个类是开放的。

Kotlin 中“开放”的具体定义是什么? 我认为这意味着“对被该文件之外的类进行子类型化的可能性开放”。

4

1 回答 1

4

方法isFinal, isOpen,isAbstractisSealed设计成只有其中一个对所有KClass实例返回 true。

资料来源:KT-19850 中的此评论

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

请投票支持KT-19850以帮助修复这种令人惊讶的行为。

于 2021-02-26T14:51:50.630 回答