我想创建一些具有几乎相同属性的类。例: 1. A类,属性:字符串a,字符串b,字符串c,AnObject d 2.类B,属性:字符串a,字符串b,字符串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;
}
但是,当我使用杰克逊将其设为JSON时,这成为一个问题。 A
变成这样:
{
"a": "",
"b": "",
"c": "",
"d": {
"a": null,
"b": null,
"c": null,
"z": ""
}
}
我想要实现的是:
{
"a": "",
"b": "",
"c": "",
"d": {
"z": ""
}
}
如何实现?
答案 0 :(得分:0)
这很可能是由于使用泛型的方式引起的。类C包含其子级(私有T d),因此实例化A时,将继承字段a,b,c和A的另一个实例,该实例还将包含字段a,b,c。不确定要做什么,但是如果要解决此问题,请从c中删除泛型(私有T d)。
public class C {
private String a;
private String b;
private String c;
}
public class A extends C {
private SomeObject z;
}
答案 1 :(得分:0)
在这里我可以看到两种可能的解决方案:仅使用没有继承的泛型类或使用没有泛型的继承。
类A
和B
不必扩展类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
另一种方法是使A
的{{1}}和B
的子代在这种情况下不必是通用的。
C