0

是否有任何标准方式/模式可以从对象中提取零碎信息?假设我有一个 json 字符串,其中包含我必须提取的几个类。我不能使用杰克逊直接提取它,因为为了获得所需的信息(如解密、解压缩等)需要进行很少的转换,我正在尝试查看是否可以将所有这些隐藏在一个类后面。

这是我打算这样做的方式,有没有更好的方法来实现这一点?只是想发表意见。

public class ExtractInformation {
    private final Object1 obj1;
    private final Object2 obj2;
          ....
    private final Object3 objn;

    public ExtractInformation(String jsonString) {
        // Extract all the information here and store locally
        obj1 = ...;
        objn = ...;
    }

    public getObect1() {
        return obj1l;
    }

    public getObject2() {
        return obj12;
    }
           ...
    public getObjectn() {
        return obj1n;
    }
}
4

1 回答 1

1

我或多或少同意,只要这样做,您就可以将您的域类(不应命名为 ExtractInformation !!!)与其数据存储在 json 字符串中的方式不可分割地连接起来。您可以创建 2 个单独的类:MyClass(POJO,您的域类)和 MyClassJsonExtractor(将用作 MyClass 的工厂的类)。并使用Builder模式创建 MyClass。

public class MyClass {
    private final Object1 obj1;
    private final Object2 obj2;
    private final Object3 obj3;

    private MyClass(MyClassBuilder builder) {
        this.obj1 = builder.obj1;
        this.obj2 = builder.obj2;
        this.obj3 = builder.obj3;
    }

    public getObj1() { return obj1; }
    public getObj2() { return obj2; }
    public getObj3() { return obj3; }

    public static class Builder {
        private final Object1 obj1;
        private final Object2 obj2;
        private final Object3 obj3;

        public Builder() {}

        public Builder setObj1(Object1 obj1) {this.obj1 = obj1; return this; }
        public Builder setObj2(Object2 obj2) {this.obj2 = obj2; return this; }
        public Builder setObj3(Object3 obj3) {this.obj3 = obj3; return this; }

        public MyClass build() {
            return new MyClass(this);
        }
    }

}

public class MyClassJSonExtractor {
    // make the as singleton, either by the old-fashioned way or by Spring
    public MyClass createMyClass(String jsonString) {
         return new MyClass.Builder().
             setObj1(...).
             setObj2(...).
             setObj3(...).
             build();
    }
}
于 2013-10-16T16:26:48.847 回答