kotlin:无法使用继承调用inteface方法

时间:2018-04-05 15:07:11

标签: android inheritance interface kotlin

我有一个像这样定义的界面

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;
        }

    }

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

就静态类型而言,getParams(scannerType)只返回ScanParameters,编译器不知道它是否恰好在运行时Type1ScanParameters

所以如果你知道

  

我有一个适配器工厂,它返回Type1ScannerAdapter实例(基于某些逻辑)

然后getParams必须返回Type1ScanParameters