如何创建给定超类的每个子类的实例?

问题描述 投票:2回答:3

我有几个抽象类,每个抽象类都有几个子类。我想创建每个子类的实例,而不必为实际上可能是数百行的代码复制/粘贴相同的代码,因为随着程序变得越来越复杂,子类的数量正在增加。

对于每个给定的抽象超类,子类实例将包含在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); } }

我想避免您在BasePhone的构造函数中看到的内容。无需每次都创建一个新实例然后“手动”添加新实例(这将花费大量的时间和精力),如果有的话,我宁愿使用一种自动方式来执行此操作。

我有几个抽象类,每个抽象类都有几个子类。我想创建每个子类的实例,而不必复制/粘贴本质上相同的代码,实际上可能是...

java class subclass superclass
3个回答
2
投票
我不是很了解您的问题,但是据我了解,您想加载任何给定父类的所有子类。为此,您可以使用反射。但是,您可能想先审查设计,甚至可能不需要。

0
投票
对于您自己的程序包,此代码来自使用反射库扫描Java程序包以查找类的答案,似乎应该这样做。感谢评论者指出这一点。

-1
投票
直接,您不能,但是可以间接。
© www.soinside.com 2019 - 2024. All rights reserved.