В моем проекте 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: Back-end (JVM) Внутренняя ошибка: сгенерирован неправильный код [...] AnalyzerException: Аргумент 3: ожидается R, но найден I
Когда я меняю свой вызов на BooleanConverter.serializeValue(array, value, 0)
, все работает нормально. Но это делает мое значение по умолчанию ненужным. Я также не могу добавить значение по умолчанию при переопределении метода из-за:
переопределяющая функция не может указывать значения по умолчанию для своих параметров
Так почему я не могу вызвать метод только с двумя аргументами, и есть ли способ решить эту проблему?