【问题标题】:enum class mapping issue when enum not found找不到枚举时的枚举类映射问题
【发布时间】:2018-08-30 06:20:44
【问题描述】:

我在 kotlin 中有一个类,它是一个枚举类,如下所示

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

我有另一个使用状态枚举类称为票证的类

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

当 GSON 映射接收到的值时,我遇到了一个异常,因为 status 字段现在包含一个新值 in_progress。由于此状态未在 Status 类中声明,因此发生了异常。

如何避免异常以确保如果在 GSON 中设置了新状态但未在 Status 类中定义,我得到状态 UNKNOWN

在我没有匹配的情况下如何返回默认值 UNKNOWN 有什么想法吗?

谢谢

【问题讨论】:

标签: java json kotlin gson


【解决方案1】:

如果你想走这条路,那么你的问题就是枚举。 GSON 正在等待一个枚举值,所以如果 in_progress 不是一个值,GSON 会拒绝。

您可以做的是创建一个新的数据类型并将您的枚举包装在其中,但是使用枚举的通用想法丢失了。

另一种方法是完全摆脱枚举。实现一个名为 status 的接口,并为每种 Status 实现一个类。这有点像枚举+。您可以通过以下方式发送您的订单 变量状态:OrderStatus = In_Progress() Var 状态:OrderStatus = Unkonwn() 稍后您可以调用类似 instanceof 的方法来检查 OrderStatus 的类型。

编辑后: 如果您希望从描述中获得行为,您必须准确说出您在等待什么(请参阅 GSON 适配器),您应该寻找其他通信方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2012-05-05
    相关资源
    最近更新 更多