猿问

实施通用地图

我有一个对象(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 <? , ? > map

abstract 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(){}


}

我的问题是如何在父类中定义映射属性,以便能够通过子类接受两种不同的类型


绝地无双
浏览 160回答 1
1回答

蝴蝶不菲

将通用参数 T 添加到 ParentClass 并在映射定义中使用它。现在,任何扩展 ParentClass 的类都必须指定映射值的类型。import java.util.Map;public abstract class ParentClass<T> {&nbsp; &nbsp; public Map <String , T > map;&nbsp; &nbsp; abstract void extract();&nbsp; &nbsp; abstract void validate();&nbsp; &nbsp; protected void setMap(Map <String , T > pMap)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; this.map=pMap;&nbsp; &nbsp; }}子类看起来像:import java.util.HashMap;import java.util.Map;public class ChildClassTypeA extends ParentClass<TypeA> {&nbsp; &nbsp; @Override&nbsp; &nbsp; void extract() {&nbsp; &nbsp; &nbsp; &nbsp; Map<String,TypeA> myMap=new HashMap<>();&nbsp; &nbsp; &nbsp; &nbsp; setMap(myMap);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; void validate() {&nbsp; &nbsp; }}现在你甚至可以让 ParentClass 实例化地图:public abstract class ParentClass<T> {&nbsp; &nbsp; public Map <String , T > map = new HashMap<>();&nbsp; &nbsp; ...}
随时随地看视频慕课网APP

相关分类

Java
我要回答