如果类是函数的参数,如何在Kotlin中实例化类?
我试图在Kotlin中创建通用函数,它可以在每次实例化不同的模型类时进行实例化。 类类型是一个参数,用于从该类生成实例并用Json对象中的数据填充它如果类是函数的参数,如何在Kotlin中实例化类?,kotlin,Kotlin,我试图在Kotlin中创建通用函数,它可以在每次实例化不同的模型类时进行实例化。 类类型是一个参数,用于从该类生成实例并用Json对象中的数据填充它 fun<T> foo() { var myModel = T() myModel.id = 2 myModel.name = "" } 不能使用T定义本身,而是将类传递给函数 import kotlin.reflect.KClass open class Model { var id: Int? =
fun<T> foo() {
var myModel = T()
myModel.id = 2
myModel.name = ""
}
不能使用T定义本身,而是将类传递给函数
import kotlin.reflect.KClass
open class Model {
var id: Int? = null
var name: String? = null
fun say() {
println("hello.")
}
}
class MyModel: Model()
fun<T: Model> foo(type: KClass<T>): T {
val myModel = type.java.newInstance()
myModel.id = 2
myModel.name = ""
return myModel
}
val mymodel = foo(MyModel::class)
mymodel.say() // hello.
不能使用T定义本身,而是将类传递给函数
import kotlin.reflect.KClass
open class Model {
var id: Int? = null
var name: String? = null
fun say() {
println("hello.")
}
}
class MyModel: Model()
fun<T: Model> foo(type: KClass<T>): T {
val myModel = type.java.newInstance()
myModel.id = 2
myModel.name = ""
return myModel
}
val mymodel = foo(MyModel::class)
mymodel.say() // hello.
您可以将函数与接口结合使用
使用reified,您可以访问泛型类型参数的真实类。
您仍然不允许直接调用构造函数,但反射将起作用
要分配id和名称,您需要定义一个接口,所有模型类都需要该接口来实现:
interface Model {
var id: Int?
var name: String?
}
inline fun <reified T : Model> createModel() : T {
val myModel = T::class.createInstance()
myModel.id = 2
myModel.name = ""
return myModel
}
您可以将函数与接口结合使用
使用reified,您可以访问泛型类型参数的真实类。
您仍然不允许直接调用构造函数,但反射将起作用
要分配id和名称,您需要定义一个接口,所有模型类都需要该接口来实现:
interface Model {
var id: Int?
var name: String?
}
inline fun <reified T : Model> createModel() : T {
val myModel = T::class.createInstance()
myModel.id = 2
myModel.name = ""
return myModel
}
这就是java的方式。在Kotlin中,我们更愿意使用@ReneThx提到的带有具体化类型参数的内联函数!你和@Rene也帮了我。这是java的方式。在Kotlin中,我们更愿意使用@ReneThx提到的带有具体化类型参数的内联函数!你们和@Rene也帮了我。若类并没有参数构造函数呢?若类并没有参数构造函数呢?