Kotlin: невозможно вызвать метод интерфейса с наследованием

У меня есть такой интерфейс

interface ScannerAdapter<in P> where P : ScanParameters {
    fun scan(scanParameters: P): Single<Boolean>
}

Теперь у меня есть класс адаптера

class Type1ScannerAdapter: ScannerAdapter<Type1ScanParameters> {

    override fun scan(printParameters: Type1ScanParameters): Single<Boolean> {
        TODO("not implemented")
    }

}

Type1ScanParameters - это

sealed class ScanParameters

data class Type1ScanParameters(val somethingProbably: Unit): ScanParameters()

Теперь, когда я пытаюсь вызвать функцию scan на экземпляре Type1ScannerAdapter, я получаю сообщение об ошибке:

scan(capture) cannot be applied to scan(...ScanParamteres)

Как я вызываю функцию:

У меня есть фабрика адаптеров, которая возвращает экземпляр Type1ScannerAdapter (на основе некоторой логики) Так что я звоню

adapterFactory.getAdapter().scan(getParams(scannerType))




     private ScanParameters getParams(int scanType) {
        switch(scanType){
            case xyz:
                return new Type1ScanParameters(....);
//            
            default:
                return null;
        }

    }

Как мне решить эту проблему?

не могли бы вы добавить код, чтобы показать, как вы вызываете функцию scan и параметр, который вы передаете этой функции?

Sergii Zhevzhyk 05.04.2018 17:41

обновлено о том, как называется сканирование

png 05.04.2018 18:05

Просто любопытно: что такое Single? Судя по названию, мне кажется, что все, что он делает, может уже существовать в стандартной библиотеке.

Thomas 06.04.2018 09:04
2
3
114
1

Ответы 1

Что касается статических типов, getParams(scannerType) просто возвращает ScanParameters, компилятор не знает, является ли это Type1ScanParameters во время выполнения.

Итак, если вы знаете

I have an adapter factory that returns the Type1ScannerAdapter instance ( based on some logic)

тогда getParams должен вернуть Type1ScanParameters.

Другие вопросы по теме