知识卡片

Kotlin数组的不变性设计

专业/工作 · 69

内容

Kotlin的Array<T>是不变的(invariant),Array<String>不能直接赋值给Array<Any>,这与Java数组的协变形成对比。Java数组的协变会把类型不匹配的错误从编译期推迟到运行时才抛出ArrayStoreException,Kotlin用不变性提前在编译期堵住这个漏洞;如果确实需要把String数组当只读的Any数组使用,需要显式声明为Array<out Any>做型变。也就是说灵活性不是默认给的,而是要显式声明”只读”意图才能换回来。

参考来源

《Kotlin开发快速入门与实战》第2章《Kotlin编程基础》