Java 使用通用基础模型创建模型

标签 java oop

我想创建一些具有几乎相同属性的类。例子: 1、A类,属性:String a、String b、String c、AnObject d 2、B类,属性:String a、String b、String c、OtherObject d

A类和B类的区别仅在于属性d。

我已经创建了一个类

public class C <T> {
    private String a;
    private String b;
    private String c;
    private T d;
}

然后,对于A类

public class A extends C<A> {
    private SomeObject z;
}

对于B类

public class B extends C<B> {
    private OtherObject z;
    private Integer y;
}

但是,当我使用 jackson 将其制作为 JSON 时,它就成为一个问题。 A 变成这样:

{
    "a": "",
    "b": "",
    "c": "",
    "d": {
        "a": null,
        "b": null,
        "c": null,
        "z": ""
    }
}

我想要实现的是:

{
    "a": "",
    "b": "",
    "c": "",
    "d": {
        "z": ""
    }
}

如何实现这一目标?

最佳答案

我在这里可以看到两种可能的解决方案:仅使用没有继承的泛型类或使用没有泛型的继承。

AB不必扩展类C。这些冗余属性从父类(即 C)进入 JSON 表示形式。

    public class C <T> {
        private String a;
        private String b;
        private String c;
        private T d;
    }

    public class A {
        private SomeObject z;
    }

    public class B {
        private OtherObject z;
        private Integer y;
    }

    // example of usage
    C<A> a = new C<>();
    a.setD(new A());
    // and so on
    C<B> b = new C<>();
    b.setD(new B());
    // and so on

另一种方法是使 AB 成为 C 的子级,在这种情况下不必是通用的。

    @JsonTypeInfo(
      use = JsonTypeInfo.Id.NAME, 
      include = JsonTypeInfo.As.PROPERTY, 
      property = "type")
    @JsonSubTypes({ 
      @Type(value = A.class, name = "a"), 
      @Type(value = B.class, name = "b") 
    })
    public class C {
        private String a;
        private String b;
        private String c;
    }

    public class A extends C {
        private SomeObject z;
    }

    public class B extends C {
        private OtherObject z;
        private Integer y;
    }

    // example of usage
    A a = new A();
    B b = new B();

关于Java 使用通用基础模型创建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58272243/

相关文章:

java - apache poi 从 2.5 升级到 3.8 会出现 Excel 错误

c# - 如何在继承中授予对选择性类方法的访问权限?

Java Swing API - 两个 JPanel 如何相互通信?

C# Basic OOP - 使用构造函数制作类的字典

java - 使用模式在java中搜索和替换字符串

java - 如何链接和应用一系列比较器?

java - 从 javadocs 中的 ant 构建中排除文件

Java - Pong 桨和球碰撞错误?

JavaScript 从函数或对象中捕获异常

oop - 设计用户访问/权限类