【问题标题】:Can these 3 methods be generalized into 1 method这3种方法可以概括为1种方法吗
【发布时间】:2018-09-23 13:08:32
【问题描述】:

我有以下这 3 种方法。我只是不知道将它们作为一个整体,因为它们是数组、列表或只是一个对象的类型。这些方法只是将给定的对象转换为 json 字符串,然后将其转换为给定的指定类。

public static List<Object> objectListSerializer(List<Document> documents, Class entity) {
    List<Object> entityList;

    String json = com.mongodb.util.JSON.serialize(documents);

    entityList = (List<Object>) GSON_INSTANCE.fromJson(json, entity);

    return entityList;
}

public static Object objectArraySerializer(Object objectArray, Class clazz) {
    String jsonString = GSON_INSTANCE.toJson(objectArray);

    Object convert[] = (Object[]) GSON_INSTANCE.fromJson(jsonString, clazz);

    return convert;

}


public static Object objectSerializer(Object object, Class clazz) {
    String jsonString = GSON_INSTANCE.toJson(object);

    Object convert = GSON_INSTANCE.fromJson(jsonString, clazz);

    return convert;
}

【问题讨论】:

  • 使用 interfacegenerics 进行不同的实现。
  • 并提示:遵循 java 命名约定。方法名称首先与动词一起使用。然后你的名字非常具有误导性。您将内容序列化为 JSON,然后反序列化该 JSON?阅读您的方法名称,这一点也不清楚。
  • @GhostCat 是的,感谢您为我指出这一点。我对这些命名感到困惑
  • 恕我直言,如果您的任何方法的返回类型是 Object,您应该考虑重新考虑您的代码设计。

标签: java json code-duplication generalization


【解决方案1】:

基本上,您可以编写一个包含对象类型的某些情况的方法,如以下几行。

public static Object serialize(Object object, Class<?> entity) {
    String jsonString = null;

    if (object instanceof List) {    
        jsonString = com.mongodb.util.JSON.serialize((List<?>) object);
        return (List<?>) GSON_INSTANCE.fromJson(jsonString, entity);
    } else {
        jsonString = GSON_INSTANCE.toJson(object);

        if (object.getClass().isArray()) {
            return (Object[]) GSON_INSTANCE.fromJson(jsonString, entity);
        } else {
            return GSON_INSTANCE.fromJson(jsonString, entity);
        }
    }
}

【讨论】:

  • 你会说这是一个好习惯吗?指的是我帖子中的cmets?我对这个泛型没有很好的理解,并且似乎没有通过 Oracle 的“Box”示例来理解它。
  • 如果您只想使用一种方法,我认为这种做法对您有好处。这是最简单的做法。
猜你喜欢
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多