Вы можете использовать функцию 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()
}