如何在Kotlin中使用Lambda函数正确初始化Short类型数组?
Kotlin中使用Lambda初始化Short类型数组的正确方式
你遇到的错误是因为Lambda参数n默认是Int类型,n*2的计算结果也是Int,而Array<Short>要求元素为Short类型。Kotlin不允许Int到Short的隐式转换(防止精度丢失),因此必须显式转换类型。
以下是两种常用的正确实现方式:
1. 使用基本类型数组ShortArray(推荐)
ShortArray是专门存储Short基本类型的数组,比Array<Short>(引用类型数组)更高效。初始化时只需将计算结果显式转为Short:
val shortArr3 = ShortArray(10) { n -> (n * 2).toShort() }
2. 使用引用类型数组Array<Short>
如果需要使用Array<Short>,同样要在Lambda中显式转换类型:
val shortArr3: Array<Short> = Array(10) { n -> (n * 2).toShort() }
补充说明:之前用arrayOf(1,2,3)能直接赋值给Array<Short>,是因为这些是编译期常量,编译器可以自动完成安全的类型转换;但Lambda中的计算是运行时动态生成的,必须手动调用toShort()完成转换。
内容的提问来源于stack exchange,提问作者Chaitanya
相关产品推荐
相关产品推荐

