Получить параметр SerializedName из дочернего класса в Котлине - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь разобрать ответ API, в основном построенный так:

{
    "ApiFunc1":{
        "SomeData1":"SomeValue1",
        "SomeData2":"SomeValue2",
        "SomeData3":"SomeValue3"
    }
}


{
    "ApiFunc2":{
        "SomeData4":"SomeValue4",
        "SomeData5":"SomeValue5",
        "SomeData6":"SomeValue6"
    }
}
.
.
.

Я создал базовый класс следующим образом:

class Model_BaseResponse<TResponse> : Serializable {

    @SerializedName("ErrorMessage")
    var errorMessage: String? = null

    @SerializedName("value")
    var data: TResponse? = null

}

Каждый ApiFunc возвращает разные данные. Я хочу создать базовый класс, в котором data: TResponse @SerializedName ("ApiFunc1") или @SerializedName ("ApiFunc2") могут быть установлены в дочернем классе. Есть ли способ к этому? Я делаю это регулярно, определяя

@SerializedName("value")
var data: TResponse? = null

в каждом дочернем классе. Просто было любопытно об этом. Заранее спасибо за любую идею.

1 Ответ

0 голосов
/ 28 июня 2018

Для аннотации типа SerializedData требуется, чтобы ее аргументы были константами времени компиляции. Взглянув на то, что означает «постоянная времени компиляции» в Kotlin, вы обнаружите:

Свойства, значение которых известно во время компиляции, могут быть помечены как константы времени компиляции с использованием модификатора const. Такие свойства должны соответствовать следующим требованиям:

  • Верхний уровень или член объекта
  • Инициализируется со значением типа String или типа примитива
  • Нет пользовательского геттера

Такие свойства можно использовать в аннотациях:

const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"

@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }

Я считаю, что первое требование "Верхний уровень или член объекта" не может быть выполнено для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...