проблема отображения класса enum, когда enum не найден - PullRequest
0 голосов
/ 30 августа 2018

У меня есть класс в kotlin, который является перечислимым классом, как показано ниже

enum class Status {
  @SerializedName("open")
  OPEN,
  @SerializedName("close")
  CLOSE,
  UNKNOWN
}

У меня есть другой класс под названием ticket, использующий статус enum class

class Order(
    var id: String,
    var status: Status = Status.UNKNOWN,
}

Когда GSON отображает полученное значение, у меня есть исключение, потому что поле status теперь содержит новое значение in_progress. Поскольку это состояние не объявлено в классе Status, произошло исключение.

Как можно избежать исключения, чтобы убедиться, что если в GSON установлен новый статус, но не определен в классе Status, я получил статус UNKNOWN?

Любая идея о том, как вернуть значение по умолчанию UNKNOWN в моем случае, когда ничего не совпадает?

Спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Если вы хотите пойти по этому пути, тогда ваша проблема - enum. GSON ожидает значения enum, поэтому, если in_progress не является значением, GSON скажет нет.

То, что вы можете сделать, - это создать новый тип данных и обернуть в него свой enum, но общая идея для использования перечисления потеряна.

Другой подход - полностью избавиться от перечисления. Реализация интерфейса с именем status и реализация класса для каждого типа Status. Это своего рода перечисление +. Вы можете затем отправить свой заказ с чем-то вроде Var Status: OrderStatus = In_Progress () Var Status: OrderStatus = Unkonwn () Позже вы можете вызвать что-то вроде instanceof, чтобы проверить тип OrderStatus.

После вашего редактирования: Вы должны сказать GSON именно то, что вы ожидаете (см. Адаптеры GSON), если вы хотите, чтобы поведение из вашего описания вы искали другой способ общения.

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