[英]implement nested abstract class with getter/setter
我有以下抽象類結構:
public abstract class A {
...
private List<B> b;
public List<B> getB() {
return b;
}
public void setB(List<B> b) {
this.b = b;
}
public static abstract class B {
}
}
並像這樣實現它:
public class AA extends A {
public static class BB extends B {
...
}
當我現在使用jackson在AA上映射Json時,我收到一個錯誤,它無法創建A $ B的實例。 我認為這是因為A中的getter / setter仍然引用B而不是BB,這會導致錯誤。 有沒有辦法我可以這樣做,而不是將getter / setter放在子類中?
您可以添加類型捕獲以確保b始終正確鍵入,如下所示:
public abstract class A<T extends A.B> {
...
private List<T> b;
public List<T> getB() {
return b;
}
public void setB(List<T> b) {
this.b = b;
}
public static abstract class B {
...
}
}
然后
public class AA extends A<AA.BB> {
...
public static class BB extends B {
...
}
如何反序列化有多種選擇。 如果你沒有注釋,傑克遜可能會回到使用最近的超類的構造函數,該構造函數具有沒有參數的公共構造函數。 創建空對象后,它會使用反射設置字段。
Objects.requireNotNull
構造函數中的任何驗證。 如何使用Jackson的更精確的方法是在構造函數中使用@JsonCreator
和@JsonProperty
,命名所有參數。
我對這個相當不尋常的結構非常不確定。 畢竟,你有一個嵌套在抽象類中的抽象類,我已經看到了很多東西,但我還沒有看到這樣的東西。 有充分的理由嗎? 或者將內部類移動到自己的文件不是問題嗎? (畢竟是public static
)
如果創建AA
實例,則需要抽象類B
的實例,並定義nowwhere,使用哪個實例。 僅提供一些實現( BB
)是不夠的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.