为什么 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 中“开放”的定义到底是什么?
我认为它的意思是“允许在这个文件之外被 类 子类型化的可能性”。
方法 isFinal
、isOpen
、isAbstract
、isSealed
的设计使得其中只有一个 returns 对所有 KClass
个实例。
由于接口是抽象的,I::class.isAbstract == true
。结合以上设计目标,I::class.isOpen == false
结果
请投票 KT-19850 以帮助解决这个令人惊讶的行为。
在 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 中“开放”的定义到底是什么? 我认为它的意思是“允许在这个文件之外被 类 子类型化的可能性”。
方法 isFinal
、isOpen
、isAbstract
、isSealed
的设计使得其中只有一个 returns 对所有 KClass
个实例。
由于接口是抽象的,I::class.isAbstract == true
。结合以上设计目标,I::class.isOpen == false
结果
请投票 KT-19850 以帮助解决这个令人惊讶的行为。