可以使用泛型方法或泛型类来解决不同反序列化类型之间的共享行为问题。例如:
public class Deserializer {
public static T deserialize(String json, Class clazz) {
Gson gson = new Gson();
return gson.fromJson(json, clazz);
}
}
// 使用方式:
Foo foo = Deserializer.deserialize(json, Foo.class);
Bar bar = Deserializer.deserialize(json, Bar.class);
在上述代码示例中,Deserializer.deserialize
方法使用泛型类型 T
来接收不同的反序列化类型,从而避免了在代码中编写多份相似但不同的反序列化逻辑。
另外,如果需要对不同类型的反序列化逻辑进行细粒度控制,可以使用泛型类来实现:
public abstract class Deserializer {
private Gson gson = new Gson();
public T deserialize(String json) {
return gson.fromJson(json, getType());
}
protected abstract Type getType();
}
// 使用方式:
Deserializer fooDeserializer = new Deserializer() {
@Override
protected Type getType() {
return new TypeToken() {}.getType();
}
};
Foo foo = fooDeserializer.deserialize(json);
Deserializer barDeserializer = new Deserializer() {
@Override
protected Type getType() {
return new TypeToken() {}.getType();
}
};
Bar bar = barDeserializer.deserialize(json);
在上述代码示例中,Deserializer
是一个泛型类,它的类型参数 T
代表具体的反序列化类型。该类定义了 deserialize
方法,使用 getType
方法返回具体类的类型,这样针对不同类型,就可以细粒度控制反序列化逻辑了。
上一篇:不同泛型的“返回自身”