在继承“一”科特林仿制药的用法,“走出去”

问题描述 投票:1回答:1

我有我打算用来下载从服务器的一些数据的基类:

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的基地型

有没有办法实现无级投这个类层次结构的方式,或者什么是实现这一目标的最佳方式是什么?

generics kotlin
1个回答
2
投票

这是否给你你想要什么?

abstract class Processor<T : BaseEntity> {...}

val processor: EntityProcessor<out BaseEntity> = ...
© www.soinside.com 2019 - 2024. All rights reserved.