我有一个这样定义的接口(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

08-18 16:45