【发布时间】:2018-09-16 17:47:31
【问题描述】:
我希望能够基于 HashMap 条目创建类的实例。
例如这就是我想写的:
public class One implements Interface {
public void sayName() {
System.out.println("One");
}
}
public class Two implements Interface {
public void sayName() {
System.out.println("Two");
}
}
Map<String, Interface> associations = new HashMap<String, Interface>();
associations.put("first", One);
associations.put("second", Two);
Interface instance = new associations.get("first")();
instance.sayName(); // outputs "One"
但我强烈怀疑这在 Java 中不起作用。
我的情况:我想创建一种将String 名称与类相关联的方法。
用户可以通过使用其“名称”来创建类的实例。
我想尝试:制作一个名称到类的映射(我不知道如何在映射中存储类),并从映射中获取与“名称”匹配的项目,然后实例化它。
那行不通。
如何将类与 String 名称关联并使用我给它的“名称”实例化这些类?
【问题讨论】:
-
您将需要研究 Java 反射 API。特别是有一个 class.forName 方法
-
制作您的地图
Map<String, Supplier>并使用One::new和Two::new而不是One或Two。然后你可以做associations.get("first").get()。 -
此外,您实际上不想存储类,而是构造函数。从某种角度来看,构造函数只是一个Provider,即一个在调用时会生成一些东西的函数。正如@Kon 所说,这肯定会涉及一些反思。您可能还想查看Factory method- 和/或Builder-Pattern。
-
您的地图输入错误。对于 Class.forName 方法,它应该是 Map
。或者 Map >(@lexicore 有更好的建议)
标签: java class oop dictionary first-class