我一直在学习模块化代码,我自己也在努力解决一段时间以来遇到的问题。我有两个抽象类,这两个类都有多个子类。其中一个类尝试创建一个hashmap来存储另一个抽象类的所有子类的对象。但是,如果我有一些单独的方法,我不能在存储在hashmap中的对象上调用它们,因为它们的类型不同。如何在保持代码模块化的同时解决这个问题?
第一个抽象类中的hashmap:
protected Map<Ruler, List<Nation> nations = new HashMap<Ruler, List<Nation>();
然后,其中一个子类中的代码试图在“Nation”列表中的对象上调用一个方法,该方法仅存在于Nation的一个子类中。我该如何解决这个问题?
带有hashmap的抽象类:
public abstract class Ruler {
protected Ruler ruler;
protected Map<Ruler, List<Nation> nations = new HashMap<Ruler, List<Nation>();
public Ruler(Ruler ruler) {
super();
this.ruler= ruler;
this.ruler.put(ruler, new ArrayList<Nation>());;
}
}
public class Government extends Ruler {
public Government(Ruler ruler) {
super(ruler);
}
public double totalGovernmentCost() {
double cost = 0;
for (Nation nation : this.nations.get(ruler)) {
cost += nation.calculateGovernmentCost();
}
}
}
然后是第二个抽象类'Nation'。与统治者大致相同。但是使用'calculateGovernmentCost()'方法的子类是GovernmentNation。我得到的错误是:
nation.calculateGovernmentCost();
它表示'calculateGovernmentCost()'未定义为Nation类型。