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;
}
添加回答
舉報