我正在开发 Java 应用程序。这是一个抽象类 Model 和 2 个派生类 Model 1 和 Model 2。Model1 和 Model2 的行为不同,所以我想让用户从两者中选择一个模型。 它可以像这样实现:
Model model;
If(response==1){
model = new Model1();
}else if(response==2){
model = new Model2();
}
现在的问题是,如果我添加一个新类 Model3,我必须重写代码。 我可以创建一个列表,在其中添加每个类的一个实例,然后添加一个静态方法,该方法将返回该类的一个新实例,但我希望它可以用更多的风格来完成。
是否可以创建一个列表来保存每个类的类型。从这个列表中,我可以创建一个菜单来选择模型,然后使用该类型创建用户需要的类。
那么是否有可能创建一个 List<Class>
,然后使用 Class 对象作为构造函数,创建给定类的实例?
最佳答案
您可以创建 suppliers 的列表:
static final List<Supplier<Model>> MODEL_MAKERS = ImmutableList.of(
new Supplier<Model>() { public Model get() { return new Model1(); } },
new Supplier<Model>() { public Model get() { return new Model2(); } },
new Supplier<Model>() { public Model get() { return new Model3(); } }
);
你可以随意使用反射,但这需要跳出 Java 的正常异常处理机制,需要零参数 public
构造函数和限制代码更改方式的 public
类以未被 javac
检查的方式进行维护,在这种情况下是没有必要的。
关于Java,类类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447106/