亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 使用通用基礎模型創建模型

Java 使用通用基礎模型創建模型

慕森卡 2023-09-27 21:30:05
我想創建一些具有幾乎相同屬性的類。示例: 1. A 類,屬性:String a、String b、String c、AnObject d 2. B 類,屬性:String a、String b、String c、OtherObject dA類和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;}然而,當我使用 jackson 將其制作為 JSON 時,它就成為一個問題。A變成這樣:{    "a": "",    "b": "",    "c": "",    "d": {        "a": null,        "b": null,        "c": null,        "z": ""    }}我想要實現的是:{    "a": "",    "b": "",    "c": "",    "d": {        "z": ""    }}如何實現這一目標?
查看完整描述

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();


查看完整回答
反對 回復 2023-09-27
?
慕哥6287543

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;

}


查看完整回答
反對 回復 2023-09-27
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號