如何解决为什么 Kotlin 接口“未开放”?
在 Kotlin 1.4.30 中,当我输入时
<Autocomplete
options={ufList}
getoptionLabel={(option) => option.label}
style={{ width: 200,marginLeft: 10 }}
onChange={changeValue}
getoptionSelected={(option) => option.value === value}
className={clsx(classes.TextField,classes.dense)}
// value={value}
autoHighlight
autoSelect
renderInput={(params) => (
<TextField
{...params}
{...importedProps}
error={Boolean(errorMessage)}
helperText={errorMessage}
label="UF"
value={value}
margin="dense"
variant="outlined"
/>
)}
/>
Kotlin 编译器警告我 open interface I
。这完全有道理:当然接口是开放的,否则它们将毫无用处。
然而,反射库似乎与此矛盾:
modifier 'open' is redundant for 'interface'
这有什么意义? KDoc of isOpen
非常简短:
interface I
println(I::class.isOpen) // prints 'false'
如果这个类是开放的。
Kotlin 中“开放”的确切定义是什么? 我认为它的意思是“对被这个文件之外的类进行子类型化的可能性持开放态度”。
解决方法
方法 isFinal
、isOpen
、isAbstract
、isSealed
被设计为对于所有 KClass
实例只有其中一个返回 true。
由于接口是抽象的,I::class.isAbstract == true
。结合上述设计目标,I::class.isOpen == false
结果。
请为 KT-19850 点赞,以帮助解决这种令人惊讶的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。