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

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

實施通用地圖

實施通用地圖

絕地無雙 2023-06-28 15:38:20
我有一個對象(Object o),它有一個父類作為屬性,該父類有兩個抽象方法和一個映射作為屬性。一個是 validateMap(),另一個是 extractMap()。然后我有兩個子類,我在其中實現這兩個方法并使用 extractMap() 方法設置超級地圖。我想做的是根據一些業務邏輯,每個子類定義不同類型的地圖。ParentClass parent = new ParentClass();Object o = new Object();if (business logic deciding which type of map needed TypeA or TypeB){ChildClassTypeA childClassA = new ChildClassA();childClassA.extractMap();o.setPArentClass(childClassA);}ParentClass{public Map <? , ? > mapabstract void extract()abstract void validate()}ChildClassTypeA{public void extract(){ Map<String, TypeA > map = new Map<>(); super.setMap(map);}public void validate(){}}ChildClassTypeB{public void extract(){ Map<String, TypeB > map = new Map<>(); super.setMap(map);}public void validate(){}}我的問題是如何在父類中定義映射屬性,以便能夠通過子類接受兩種不同的類型
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

將通用參數 T 添加到 ParentClass 并在映射定義中使用它。現在,任何擴展 ParentClass 的類都必須指定映射值的類型。


import java.util.Map;


public abstract class ParentClass<T> {

    public Map <String , T > map;

    abstract void extract();

    abstract void validate();


    protected void setMap(Map <String , T > pMap)

    {

        this.map=pMap;

    }

}

子類看起來像:


import java.util.HashMap;

import java.util.Map;


public class ChildClassTypeA extends ParentClass<TypeA> {


    @Override

    void extract() {

        Map<String,TypeA> myMap=new HashMap<>();

        setMap(myMap);

    }


    @Override

    void validate() {


    }

}

現在你甚至可以讓 ParentClass 實例化地圖:


public abstract class ParentClass<T> {

    public Map <String , T > map = new HashMap<>();

    ...

}


查看完整回答
反對 回復 2023-06-28
  • 1 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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