簡體   English   中英

使用getter / setter實現嵌套的抽象類

[英]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 {
        ...
    }

如何反序列化有多種選擇。 如果你沒有注釋,傑克遜可能會回到使用最近的超類的構造函數,該構造函數具有沒有參數的公共構造函數。 創建空對象后,它會使用反射設置字段。

  • Reflection將繞過Objects.requireNotNull構造函數中的任何驗證。

如何使用Jackson的更精確的方法是在構造函數中使用@JsonCreator@JsonProperty ,命名所有參數。

  • 這使您可以強制Jackson使用您創建的構造函數並驗證該對象。

我對這個相當不尋常的結構非常不確定。 畢竟,你有一個嵌套在抽象類中的抽象類,我已經看到了很多東西,但我還沒有看到這樣的東西。 有充分的理由嗎? 或者將內部類移動到自己的文件不是問題嗎? (畢竟是public static

如果創建AA實例,則需要抽象類B的實例,並定義nowwhere,使用哪個實例。 僅提供一些實現( BB )是不夠的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM