我想用Gson建立一个WebSocket客户端。正如预期的那样,websocket通信是基于几个不同的消息。
我希望有一个优雅的方法将JSON字符串转换为声明的模型/对象。
第一次尝试:
if message.contains("fieldA") {
return gson.fromJson(message, ObjectA.class);
} else if message.contains("fieldB") {
return gson.fromJson(message, ObjectB.class);
} else if message.contains("fieldC") {
return gson.fromJson(message, ObjectC.class);
}
// etc
第二次尝试,我看到了泛型和任意类型的解决方案,但与第一次尝试非常相似。我需要声明类型,而不是寻找类的区别。这在编写的代码中非常相似。
我认为更容易拥有和维护的是,在一些包中声明消息的模型,并拥有这些实现之一。
1.使用基类/接口作为fromJson
的公共接地
1.在某个地方注册支持的模型,这样我就可以执行简单的解析器,例如gson.fromJson(messageString)
有没有这样或那样的方法来实现一个更优雅的解决方案?
1条答案
按热度按时间vom3gejh1#
由于“contains”操作所需的线性复杂度搜索(不像
RuntimeTypeAdapterFactory
那样使用鉴别器类型字段),我认为通用解决方案并不是高效的,但它可以像这样实现:使用以下示例:
我不确定这个实现是否是超级优化的(好吧,我给予了,它不是),但我猜下面的实现会更简单,更高效(不管没有API):