我试图在Kotlin中实现通用功能,该功能可以在每次不同的模型类时实例化。 类类型是一个参数,用于从该类中创建实例并用Json对象的数据填充它。
fun<T> foo() {
var myModel = T()
myModel.id = 2
myModel.name = ""
}
答案 0 :(得分:4)
您可以将inline reified
函数与界面结合使用。
使用reified
,您可以访问通用类型参数的实型。
您仍然不允许直接调用该构造函数,但可以进行反射。
要分配id
和name
,您需要定义一个接口,所有模型类都必须实现:
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
}
一个简单的例子:
class TestModel() : Model {
override var id: Int? = null
override var name: String? = null
}
fun main() {
val model: TestModel = createModel()
}
答案 1 :(得分:0)
您不能使用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.