为了账号安全,请及时绑定邮箱和手机立即绑定

实施通用地图

实施通用地图

绝地无双 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 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信