我有几个抽象类,每个抽象类都有几个子类。我想创建每个子类的实例,而不必为实际上可能是数百行的代码复制/粘贴相同的代码,因为随着程序变得越来越复杂,子类的数量正在增加。
对于每个给定的抽象超类,子类实例将包含在Map
(特别是HashMap
)中。这些类(super和sub)都具有不带参数的构造函数。
我从十年前就看到了这个问题的答案,说这是不可能的(或者至少是不明智的)。我希望这种情况已经改变,但是我一直找不到更多的最新答案。
编辑:因为显然我的问题还不够清楚,所以这是代码的[[example(强调example;这既不是MWE也不是我实际拥有的代码):]]public abstract class A {
public abstract void setName(String s);
public abstract String getName();
}
public class B extends A {
private String name = "B";
public String getName() {
return name;
}
public void setName(String s) {
name = s;
}
}
public class C extends A {
private int count = 0;
private String name = "C";
public void increaseCount() {
count++;
}
public String getName() {
return name;
}
public void setName(String s) {
name = s;
}
}
public class Base {
private Map<String, A> list;
public Base() {
list = new HashMap<>();
A b = new B();
list.put(b.getName(), b);
A c = new C();
list.put(c.getName(), c);
}
}
public class Phone {
private Map<String, A> list;
public Phone() {
list = new HashMap<>();
A b = new B();
list.put(b.getName(), b);
A c = new C();
list.put(c.getName(), c);
}
}
我想避免您在Base
和Phone
的构造函数中看到的内容。无需每次都创建一个新实例然后“手动”添加新实例(这将花费大量的时间和精力),如果有的话,我宁愿使用一种自动方式来执行此操作。
我有几个抽象类,每个抽象类都有几个子类。我想创建每个子类的实例,而不必复制/粘贴本质上相同的代码,实际上可能是...