在我的Kotlin项目中,我遇到以下情况:
abstract class BaseConverter<T> {
abstract fun serializeValue(output: ByteArray, value: T, offset: Int = 0): Int
}
object BooleanConverter: BaseConverter<Boolean>() {
override fun serializeValue(output: ByteArray, value: Boolean, offset: Int): Int {
output[0 + offset] = if(value) 1.toByte() else 0.toByte()
return 1
}
}
现在从我的测试用例中,我尝试调用BooleanConverter.serializeValue(array, value)
,它没有给我IDE错误消息。但是,当我尝试运行测试时,出现以下错误:
由以下原因引起:org.jetbrains.kotlin.codegen.CompilationException:后端(JVM)内部错误:生成的代码错误[...] AnalyzerException:参数3:预期为R,但找到了我
当我将通话更改为BooleanConverter.serializeValue(array, value, 0)
时,一切正常。但这使我的默认值变得不必要。由于以下原因,我也无法添加默认值:
不允许覆盖函数为其参数指定默认值
那为什么我不能只用两个参数来调用该方法,有什么方法可以解决这个问题?
答案 0 :(得分:2)
您只能将默认参数与父类类型的变量一起使用(在该方法中声明具有默认参数的方法)。解决方法:
val c: BaseConverter<Boolean> = BooleanConverter
c.serializeValue(array, value)
或不创建额外变量:
(BooleanConverter as BaseConverter<Boolean>).serializeValue(array, value)