Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 为什么我要在我的Kotlin通用版本中使用这个_Generics_Kotlin_Interface - Fatal编程技术网

Generics 为什么我要在我的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

我仍在努力掌握kotlin中泛型的诀窍,我如何写这篇文章来避免未经检查的强制转换

 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泛型也不太强。。。。