Generics 为什么我要在我的Kotlin通用版本中使用这个
我仍在努力掌握kotlin中泛型的诀窍,我如何写这篇文章来避免未经检查的强制转换Generics 为什么我要在我的Kotlin通用版本中使用这个,generics,kotlin,interface,Generics,Kotlin,Interface,我仍在努力掌握kotlin中泛型的诀窍,我如何写这篇文章来避免未经检查的强制转换 class DBEntityUtil<T:DBEntity, S:Model> { fun entityListToModelList(entityList:List<T>): List<S>{ val returnList:MutableList<S> = mutableListOf() entityList.forEach
class DBEntityUtil<T:DBEntity, S:Model> {
fun entityListToModelList(entityList:List<T>): List<S>{
val returnList:MutableList<S> = mutableListOf()
entityList.forEach{entity:T ->
returnList.add(entity.toModel() as S)
}
return returnList
}
}
S是
Model
的任何子类,toModel
只能保证返回Model
。如果你想要一个S
,你必须投下。如果您只想要模型
,您可以删除泛型S
,并且使用有趣的entityListToModelList(…):List
应该没有问题
然而,如果你想让它工作如图所示,你必须使用一个类似的设置
interface Model
interface DBEntity<S:Model> {
fun toModel(): S
}
比如说
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()))
}
}
类TestModel:Model
类TestDbEntity:DBEntity{
重写toModel():TestModel{
返回TestModel()
}
伴星{
val util=DBEntityUtil()
fun test()=util.entityListToModelList(listOf(TestDbEntity()))
}
}
S是
Model
的任何子类,toModel
只能保证返回Model
。如果你想要一个S
,你必须投下。如果您只想要模型
,您可以删除泛型S
,并且使用有趣的entityListToModelList(…):List
应该没有问题
然而,如果你想让它工作如图所示,你必须使用一个类似的设置
interface Model
interface DBEntity<S:Model> {
fun toModel(): S
}
比如说
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()))
}
}
类TestModel:Model
类TestDbEntity:DBEntity{
重写toModel():TestModel{
返回TestModel()
}
伴星{
val util=DBEntityUtil()
fun test()=util.entityListToModelList(listOf(TestDbEntity()))
}
}
编辑问题并添加
DBEntity
和Model
的接口。据我所知,您的DBEntity定义为interface DBEntity{fun toModel():Model}
。我说的对吗?toModel()
可以返回属于Model
层次结构的任何对象。编译器或运行时无法检查它是否符合s
。请编辑问题并添加DBEntity
和Model
的接口,因为我知道您的DBEntity定义为interface DBEntity{fun toModel():Model}
。我说的对吗?toModel()
可以返回属于Model
层次结构的任何对象。编译器或运行时无法检查它是否符合s
.Ty以获取帮助。。。。我正在慢慢地掌握它的诀窍。。。我的java泛型也不太强…谢谢你的帮助。。。。我正在慢慢地掌握它的诀窍。。。我的java泛型也不太强。。。。