Я пытаюсь создать механизм синтаксического анализа объектов, которые находятся в одном и том же запечатанном классе и основаны на каком-то определении типа, чтобы можно было проанализировать строку для этого конкретного класса.
Так вот примерsetup:
1) запечатанный класс:
sealed class Animal
data class Dog(
var name: String
): Animal()
data class Cat(
var color: String
): Animal()
2) метод синтаксического анализа, который анализирует JSON для этого конкретного класса
fun parse(json: String, model: KClass<out Animal>) {
//so how to pass the type of the "model" parameter to this brackets instead of question mark?
val animal = gson.fromJson<?>(json, object : TypeToken<?>() {}.type)
//and then do something
}
Так что я думаю, что смогу использовать это, например:
json = "" //some json
parse(json, Cat::class)
Как этого добиться?
Единственный способ найти сейчас - это что-то вроде этого:
fun parse(json: String, model: KClass<out Animal>) {
when (model) {
Cat::class -> {
val cat = gson.fromJson<Cat>(json, object : TypeToken<Cat>() {}.type)
//and then do something
}
Dog::class -> {
val dog = gson.fromJson<Dog>(json, object : TypeToken<Dog>() {}.type)
//and then do something
}
}
}
Но есть ли лучший способ?