У меня есть такой интерфейс
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;
}
}
Как мне решить эту проблему?
обновлено о том, как называется сканирование
Просто любопытно: что такое Single? Судя по названию, мне кажется, что все, что он делает, может уже существовать в стандартной библиотеке.
Что касается статических типов, getParams(scannerType) просто возвращает ScanParameters, компилятор не знает, является ли это Type1ScanParameters во время выполнения.
Итак, если вы знаете
I have an adapter factory that returns the Type1ScannerAdapter instance ( based on some logic)
тогда getParams должен вернуть Type1ScanParameters.
не могли бы вы добавить код, чтобы показать, как вы вызываете функцию
scanи параметр, который вы передаете этой функции?