Переопределить открытое значение из основного конструктора - PullRequest
0 голосов
/ 03 января 2019

Представьте, что у меня есть такой класс:

open class CSRequest<Data : Any>(open val onSend: () -> CSResponse<Data>) {
// some other code
}

Я бы хотел иногда иметь возможность переопределить его, чтобы написать что-то вроде:

class SpecialRequest(items: List<String>) : CSRequest<CSServerData>() {
    override val onSend: () -> CSResponse<CSServerData> = {
        // Do send work
    }
}

Но я не могу. Это мой API. Я спрашиваю, могу ли я каким-то образом спроектировать класс CSRequest, поэтому значение onSend будет переопределено расширением класса CSRequest, но в то же время будет передаваться как параметр конструктора.

1 Ответ

0 голосов
/ 03 января 2019

Конструктор суперкласса ожидает аргумент типа () -> CSResponse<Data>.Таким образом, подкласс должен передавать такое значение при вызове супер-конструктора и не должен ничего переопределять.

Поскольку вы еще не опубликовали код классов, используемых в вашем фрагменте, я приведу простой пример:

class CSResponse<D>(val body: D)
class CSServerData

open class CSRequest<Data : Any>(open val onSend: () -> CSResponse<Data>) {
    // some other code
}

class SpecialRequest(items: List<String>) : CSRequest<CSServerData>({ CSResponse(CSServerData()) })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...