我有我打算用来下载从服务器的一些数据的基类:
abstract class Processor<out T : BaseEntity> {
fun loadData() {
val data = fetchFromBackend()
saveData(data)
}
// here I'll define specific logic of saving data
// and here is my Error Type parameter T is declared as 'out' but occurs in 'invariant' position in type T
abstract protected open fun saveData(data: T)
}
然后,我有多种实现这个Processor
类,并利用它们像
val processor: EntityProcessor<BaseEntity> = when(type){
TypeA -> ProcessorImplementationA(...)
TypeB -> ProcessorImplementationB(...)
TypeC -> ProcessorImplementationC(...)
为了能够安全地分配实施处理器,我在T
通用的声明中使用了基本类型。但是,这会导致saveData(data: T)
方法的问题。如果我使用不变性,意味着通用声明之前没有关键字,我将无法安全地分配实施Processor
的基地型
有没有办法实现无级投这个类层次结构的方式,或者什么是实现这一目标的最佳方式是什么?
这是否给你你想要什么?
abstract class Processor<T : BaseEntity> {...}
val processor: EntityProcessor<out BaseEntity> = ...