我将不同类型的对象作为参数提供给不同的服务API。 示例API:
void API1(Object1 obj1);
void API2(Object2 obj2);
在接收API时,我将对象转换为JSON类型并存储在指定位置。另一个轮询器轮询存储的位置,并尝试使用Gson
将其转换为对象类型。
我可以想到的一种方法是创建一个包含所有类型对象的RequestWrapper
(例如Object1,Object2等),并在存储数据时填充正确的变量。
在接收端,我们可以将对象转换为RequestWrapper对象并检查填充的对象。
正如您所看到的,这需要额外的20多个变量对象,其中大多数都是null。此外,在将其转换为正确类型时会进行多次if-else检查。
如果有的话,以面向对象的方式实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
在基本级别,似乎有两种方法可以获取来自客户端的序列化对象的数据类型。
我可以想到让客户告诉你的几种方式:
为每种不同的数据类型添加API。
void API1(Foo obj1);
void API1(Bar obj2);
void API2(Foo obj1);
void API2(Bar obj2);
要求客户将其包含在序列化形式中。
{"class":"myPackage.MyClass"}
我可以想到几种方法来为自己解决这个问题:
预先解析JSON字符串中的某些唯一标识符(即在反序列化之前确定类型)。
if (jsonString.contains("foo")) {
Foo foo = gsonInstance.fromJson(jsonString, Foo.class);
}
上述包装方法(即在反序列化后确定类型)。
我不知道任何方法都是面向对象的,但是面向对象是如何以序列化数据开始的呢?