blu*_*ubb 5 reflection kotlin kotlin-reflect
在 Kotlin 1.4.30 中,当我输入
open interface I
Run Code Online (Sandbox Code Playgroud)
Kotlin 编译器警告我modifier 'open' is redundant for 'interface'。这完全有道理:当然接口是开放的,否则它们将毫无用处。
但是,反射库似乎与此相矛盾:
interface I
println(I::class.isOpen) // prints 'false'
Run Code Online (Sandbox Code Playgroud)
这有什么意义?的KDocisOpen非常简短:
true如果这个类是开放的。
Kotlin 中“开放”的确切定义是什么? 我认为这意味着“开放被该文件之外的类进行子类型化的可能性”。
方法isFinal、isOpen、isAbstract、isSealed的设计使得只有其中一个方法对所有KClass实例返回 true。
来源:KT-19850 中的评论。
由于接口是抽象的,I::class.isAbstract == true. 结合以上设计目标,I::class.isOpen == false结果。
请投票KT-19850以帮助解决这个令人惊讶的行为。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |