Java - Tipo pase al método estático superclase

user1209216:

Digamos que tengo clase simple:

public class TestClass
{
    public String field1 = "Field1";
    public String field2 = "Field2";
    public String field3 = "Field3";
}

Tengo varias clases POJO en mi proyecto y quiero ser capaz de serializar cada objeto a JSON. Así que creé nueva Serializerclase (GSON utiliza para serializar):

public class Serializer
{
    public String toJson()
    {
        return new Gson().toJson(this);
    }
}

Y mi clase de ejemplo se extiende Serializer:

public class TestClass extends  Serializer
{
    public String field1 = "Field1";
    public String field2 = "Field2";
    public String field3 = "Field3";
}

Y yo soy capaz de serializar cualquier objeto de la clase que se extiende Serializerllamando al toJsonmétodo, como esto:

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

Ahora quiero objeto de clase de construcción llamando al método estático fromJson. Así que mis TestClasses similar al siguiente:

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

Por lo tanto, puedo crear nuevo objeto llamando a:

TestClass test2 = TestClass.fromJson(json);

Por supuesto, esto no es buen enfoque, porque necesito para incluir fromJsonla aplicación de mis todas las clases.

Pregunta: ¿cómo mover fromJsona superclase ( Serializer), y proporcionar única, escriba dependiente de la implementación de fromJsonmétodo?

Charles Dowbecki:

Se puede definir estática fromJson()método en Serializerla clase base:

public static class Serializer {
    public static <T> T fromJson(String json, Type type) {
        return new Gson().fromJson(json, type);
    }
}

Y utilizarlo como:

TestClass obj = TestClass.fromJson(json, TestClass.class);

No es perfecto, con información de tipo redundante y no soporta bien los genéricos. Uno debe favorecer la composición sobre la herencia y en este caso mantener la serialización de la jerarquía de clases. Este enfoque no tiene ninguna ventaja sobre simplemente:

TestClass obj = new Gson().fromJson(json, TestClass.class);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176030&siteId=1
Recomendado
Clasificación