У меня есть система наследования в моем kotlin ktor-сервере.
Имея следующие классы:
open class ApiView {
var type = this.javaClass.simpleName
open var toolbar : ToolbarWidget? = null
}
class ToolbarWidget {
var title : String? = null
object Factory {
fun create() : ToolbarWidget {
return ToolbarWidget().apply {
title = "Hello"
}
}
}
}
class MainApiScreen : ApiView() {
override var toolbar : ToolbarWidget? = ToolbarWidget.Factory.create()
get() = field
set(value) {}
}
Теперь в бэкэнде в определенный момент MainApiScreen
будет построен и сериализован в json, чтобы быть потребляется через веб-сервис RESTful.
вот так:
val json = Gson().toJson(MainApiScreen())
call.respond(json)
Я хочу, чтобы код перезаписывал панель инструментов в MainApiScreen
, которая определяется суперклассом ApiView
. и верните это.
Однако я получаю следующую ошибку:
java.lang.IllegalArgumentException: class routing.app.views.MainApiScreen declares multiple JSON fields named toolbar
Возможно, это можно исправить, сделав ApiView
абстрактным, но я все же хочу, чтобы класс имел значения по умолчанию в случае поле не замещается дочерним классом