我有一个这样定义的接口(interface)
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
函数时,出现以下错误:我如何调用该函数:
我有一个适配器工厂,可以返回Type1ScannerAdapter实例(基于某些逻辑)
所以我打电话
adapterFactory.getAdapter().scan(getParams(scannerType))
private ScanParameters getParams(int scanType) {
switch(scanType){
case xyz:
return new Type1ScanParameters(....);
//
default:
return null;
}
}
我该如何解决这个问题?
最佳答案
就静态类型而言,getParams(scannerType)
仅返回ScanParameters
,编译器不知道运行时是否恰好是Type1ScanParameters
。
所以如果你知道
然后getParams
必须返回Type1ScanParameters
。