gpt4 book ai didi

kotlin - 如何创建一个基于类型或类对象生成对象的工厂?

转载 作者:行者123 更新时间:2023-12-02 13:37:59 26 4
gpt4 key购买 nike

在我的 Kotlin 应用程序中,我有一些实体(以及每个实体的数据类),对于每个实体,我都有一个实现通用 Service<T> 的服务对象界面。
我想创建一个服务工厂,它将根据参数返回一个适当的服务,该参数是我想要为其提供服务的实体类型。在 Java 中,我会通过 Class对象放入我可以从实体类的静态上下文中获取的工厂,例如。 Entity.class但我不能在 Kotlin 中做到这一点。我如何创建一个工厂,它将根据实体类型为我生成对象?

最佳答案

您正在寻找 KClass :

假设您有以下类(class):

abstract class Parent(val name: String)
class ChildA : Parent("A")
class ChildB : Parent("B")

那么你的工厂可能看起来像这样:
fun <T : Any> factory(c: KClass<T>): T {
return c.createInstance()
}

fun main(args: Array<String>) {

val childA = factory(ChildA::class)
val childB = factory(ChildB::class)

println(childA.name) // A
println(childB.name) // B
}

但是有更好的方法使用 reified :
inline fun <reified T : Any> factory(): T {
return T::class.createInstance()
}

然后你可以这样称呼它:
 val childA = factory<ChildA>()
val childB = factory<ChildB>()

println(childA.name)
println(childB.name)

请注意,不使用 reified我们做不到 T::class

关于kotlin - 如何创建一个基于类型或类对象生成对象的工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com