将Java返回ScoreController数组的方法转为Kotlin时遇问题,求解决
解决Kotlin数组转换的编译问题
我来帮你梳理下代码里的问题,你遇到的编译错误主要来自两个地方:
1. 类型不匹配问题
你的Java方法返回的是ScoreController[],但Kotlin代码里却写成了Array<GenderController>——这两个类型完全不一致,首先得把Kotlin里的类型改成和Java一致的ScoreController,或者确认是不是你笔误把ScoreController写成了GenderController。
2. 可空性不兼容问题
Java里创建new ScoreController[size]时,数组里的元素默认都是null,对应到Kotlin里,arrayOfNulls(size)返回的是可空元素的数组(类型为Array<ScoreController?>),但你的Kotlin方法声明返回的是Array<GenderController>(非空元素数组),这就导致了类型不兼容的编译错误。
正确的代码实现
根据你的Java逻辑,正确的Kotlin代码应该是这样的:
override fun newArray(size: Int): Array<ScoreController?> { return arrayOfNulls(size) }
如果你的方法必须返回非空元素的数组,那你需要初始化数组里的每个元素,比如:
override fun newArray(size: Int): Array<ScoreController> { return Array(size) { ScoreController() } // 这里需要调用ScoreController的构造函数初始化每个元素 }
补充说明
Kotlin对可空性的检查比Java严格很多,Java里的数组元素默认可空,但Kotlin会明确区分Array<T>和Array<T?>,所以一定要根据实际需求选择合适的返回类型。
内容的提问来源于stack exchange,提问作者user9478084
相关产品推荐
相关产品推荐

