找不到枚举时的枚举类映射问题

时间:2018-08-30 06:20:45

标签: java json kotlin gson

我在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的任何想法?

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑后: 如果您想要描述中的行为,则必须确切地说出GSON在等待什么(请参阅GSON适配器)。