我是相对较新的Kotlin,泛型让我头疼.我有一个由以下material 组成的架构:
- 几个数据类
- 处理数据的通用接口
- 每种数据类型处理接口的实现
- 包含要处理的数据及其相应处理器的通用处理作业(job)类
- 一个全局(单例)处理器,它实现处理接口,接受处理作业(job),并将处理委托给作业(job)处理器.它根本不关心数据本身.
简化的代码如下所示
class DataOne
class DataTwo
interface DataProcessor<in T> {
fun process(o: T)
}
class DataOneProcessor: DataProcessor<DataOne> {
override fun process(o: DataOne) = println("Processing DataOne")
}
class DataTwoProcessor: DataProcessor<DataTwo> {
override fun process(o: DataTwo) = println("Processing DataTwo")
}
class ProcessingJob<T>(val data: T, val processor: DataProcessor<T>)
object GlobalProcessor: DataProcessor<ProcessingJob<Any>> {
override fun process(job: ProcessingJob<Any>) = job.processor.process(job.data)
}
fun main() {
GlobalProcessor.process(ProcessingJob(DataOne(), DataOneProcessor()))
}
在Main函数中,我得到一个编译器错误
Type mismatch.
Required: ProcessingJob<Any>
Found: ProcessingJob<DataOne>
我理解为什么会发生这种情况:DataOne
的DataProcessor
,被视为Any
的DataProcessor
,可能会被要求处理DataTwo
,出于类型安全考虑,这是不允许的.
你能给我一些建议吗?怎样修改才能使它编译并达到所需的效果?耽误您时间,实在对不起!