Javaは - スーパークラスの静的メソッドに型を渡します

user1209216:

のは、私は単純なクラスがあるとしましょう:

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";
}

そして私は、継承したクラスの任意のオブジェクトをシリアル化することができる午前Serializer呼び出すことによってtoJson、このような方法を:

TestClass test1 = new TestClass();
String json =  test1.toJson();

今私は、静的メソッドを呼び出すことによって、構築物クラスのオブジェクトをしたいです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方法?

チャールズDowbecki:

あなたは、静的に定義することができますfromJson()方法をSerializer基本クラス:

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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=176025&siteId=1