S - это любой подкласс Model
, а toModel
может гарантировать только возврат Model
.Если вы хотите S
, вы должны сыграть.Если вы просто хотите Model
, вы можете удалить общий S
, и у вас не должно возникнуть проблем с использованием fun entityListToModelList(...): List<Model>
.
Однако если вы хотите, чтобы он работал так, как показано на рисунке, вы должны использовать настройку, подобную
interface Model
interface DBEntity<S:Model> {
fun toModel(): S
}
, которая связывает DBEntity
с типом S
.Это можно использовать как
class DBEntityUtil<S:Model, T:DBEntity<S>> {
fun entityListToModelList(entityList:List<T>): List<S>{
val returnList:MutableList<S> = mutableListOf()
entityList.forEach{entity:T ->
returnList.add(entity.toModel())
}
return returnList
}
}
И использовать, например, как
class TestModel: Model
class TestDbEntity : DBEntity<TestModel> {
override fun toModel(): TestModel {
return TestModel()
}
companion object {
val util = DBEntityUtil<TestModel, TestDbEntity>()
fun test() = util.entityListToModelList(listOf(TestDbEntity()))
}
}
https://pl.kotl.in/Bkpc92vjm