[英]Java - pass type to superclass static method
假设我有简单的课程:
public class TestClass
{
public String field1 = "Field1";
public String field2 = "Field2";
public String field3 = "Field3";
}
我的项目中有多个pojo类,我希望能够将每个对象序列化为json。 所以我创建了新的Serializer
类(用于序列化的gson):
public class Serializer
{
public String toJson()
{
return new Gson().toJson(this);
}
}
我的示例类扩展了Serializer
:
public class TestClass extends Serializer
{
public String field1 = "Field1";
public String field2 = "Field2";
public String field3 = "Field3";
}
我可以通过调用toJson
方法序列化任何扩展Serializer
的类的对象,如下所示:
TestClass test1 = new TestClass();
String json = test1.toJson();
现在我想通过从fromJson
调用静态方法fromJson
构造类对象。 所以我的TestClass
看起来像这样:
public class TestClass extends Serializer
{
public String field1 = "Field1";
public String field2 = "Field2";
public String field3 = "Field3";
public static TestClass fromJson(String json)
{
return new Gson().fromJson(json, new TypeToken<TestClass>() {}.getType());
}
}
所以,我可以通过调用创建新对象:
TestClass test2 = TestClass.fromJson(json);
当然,这不是好方法,因为我需要在我的所有类中包含fromJson
实现。
问题:如何从fromJson
移动到超类( Serializer
),并为fromJson
方法提供单一的,类型相关的实现?
您可以在Serializer
基类中定义静态fromJson()
方法:
public static class Serializer {
public static <T> T fromJson(String json, Type type) {
return new Gson().fromJson(json, type);
}
}
并将其用作:
TestClass obj = TestClass.fromJson(json, TestClass.class);
它与冗余类型信息并不完美,并且不能很好地支持泛型。 应该优先考虑组合而不是继承,并且在这种情况下,将序列化保留在类层次结构之外。 这种方法没有简单的优势:
TestClass obj = new Gson().fromJson(json, TestClass.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.