gpt4 book ai didi

kotlin - 使用默认参数调用重写的方法

转载 作者:行者123 更新时间:2023-12-02 00:57:15 25 4
gpt4 key购买 nike

在我的 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 错误消息。但是,当我尝试运行测试时,出现以下错误:

Caused by: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: wrong code generated [...] AnalyzerException: Argument 3: expected R, but found I

当我将调用更改为 BooleanConverter.serializeValue(array, value, 0) 时,一切正常。但这使得我的默认值变得不必要了。我也无法在重写方法时添加默认值,因为:

an overriding function is not allowed to specify default values for its parameters

那么为什么我不能只用两个参数调用该方法,有什么办法可以解决这个问题吗?

最佳答案

您只能对父类类型的变量使用默认参数(在其中声明具有默认参数的方法)。尝试解决方法:

val c: BaseConverter<Boolean> = BooleanConverter
c.serializeValue(array, value)

或者不创建额外的变量:

(BooleanConverter as BaseConverter<Boolean>).serializeValue(array, value)

关于kotlin - 使用默认参数调用重写的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com