Вызовите переопределенный метод с аргументами по умолчанию - PullRequest
0 голосов
/ 18 ноября 2018

В моем проекте 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), все работает нормально. Но это делает мое значение по умолчанию ненужным. Я также не могу добавить значение по умолчанию при переопределении метода из-за:

переопределяющая функция не может указывать значения по умолчанию для своих параметров

Так почему я не могу вызвать метод только с двумя аргументами, и есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 18 ноября 2018

Параметры по умолчанию можно использовать только с переменными типа родительского класса (в котором объявлен метод с параметрами по умолчанию). Попробуйте в качестве обходного пути:

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

или без создания дополнительной переменной:

(BooleanConverter as BaseConverter<Boolean>).serializeValue(array, value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...