我有一个像这样定义的界面
interface ScannerAdapter<in P> where P : ScanParameters {
fun scan(scanParameters: P): Single<Boolean>
}
现在我有一个Adapter类
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
函数时,我收到错误
扫描(捕获)无法应用于扫描(... ScanParamteres)
我如何调用该函数:
我有一个适配器工厂,它返回Type1ScannerAdapter实例(基于某些逻辑) 所以我在打电话
adapterFactory.getAdapter().scan(getParams(scannerType))
private ScanParameters getParams(int scanType) {
switch(scanType){
case xyz:
return new Type1ScanParameters(....);
//
default:
return null;
}
}
如何解决此问题?
答案 0 :(得分:0)
就静态类型而言,getParams(scannerType)
只返回ScanParameters
,编译器不知道它是否恰好在运行时Type1ScanParameters
。
所以如果你知道
我有一个适配器工厂,它返回Type1ScannerAdapter实例(基于某些逻辑)
然后getParams
必须返回Type1ScanParameters
。