2 回答
TA贡献1807条经验 获得超9个赞
我在这里可以看到两种可能的解决方案:仅使用没有继承的泛型类或使用没有泛型的继承。
类A并B不必扩展类C。这些冗余属性从父类(即 )进入 JSON 表示形式C。
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和B子元素,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();
TA贡献1831条经验 获得超10个赞
这很可能是因为您使用泛型的方式而发生的。类 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;
}
添加回答
举报