如何制作.class的地图?
How to make map of .class?
我是 Java 反射和泛型的新手,我正在努力理解它们。在这里,我遇到了一个问题。我可以制作 or 和其他东西的列表和地图。但是我可以制作 类 的地图吗?
我有这个 class
public class ClassA{}
public class ClassB extends ClassA{}
public class ClassC extends ClassA{}
等等..
现在我想要一个像这样的地图 Map();
在此地图中,我可以放置从 A 延伸的任何内容。这很好。但是如果我想存储这样的东西怎么办:
ClassX extends ClassA...
//some stuff
Map<String, ?????> customMapForTest = new HashMap<>();
customMapForTest.add("customKey", ClassX.class);
因此,根据我的设置,我将拥有某些我想使用的某些 classes 的模板图之类的东西。
这样的事情可能吗?如果我想在 map 中存储这种 .class 文件,它是如何调用的?
为了更深入地了解情况,我有自己的应用程序//别担心,这不是一个 public 项目或其他东西.. 只是为了试验。
我有一个包含这样一些字符的文件:X7WE2C3AD4A2
只是一些随机的东西。
现在我有一个文件 reader 读取每个字符并基于它搜索我创建的地图,获取该文件的 class 并创建该 class 的新实例并添加一些值基于类型。
示例:
customMapForTesting.get("X").getClass().getDeclaredConstructor(int.class,String.class).newInstance(numberVariable, stringVariable);
我将新实例存储到不同的地图并将其用于其他一些东西。
问题是我需要所有可能的对象来扩展我的模板,我不想在 templateMap 中存储实例...
java.lang.Class
类型就是你要找的
Map<String, Class<?>> map = new HashMap<>();
map.put("string",String.class);
请注意,int.class
不同于 Integer.class
System.out.println(int.class.equals(Integer.class)); //false
System.out.println(int.class.equals(Integer.TYPE)); //true
我是 Java 反射和泛型的新手,我正在努力理解它们。在这里,我遇到了一个问题。我可以制作 or 和其他东西的列表和地图。但是我可以制作 类 的地图吗?
我有这个 class
public class ClassA{}
public class ClassB extends ClassA{}
public class ClassC extends ClassA{}
等等.. 现在我想要一个像这样的地图 Map(); 在此地图中,我可以放置从 A 延伸的任何内容。这很好。但是如果我想存储这样的东西怎么办:
ClassX extends ClassA...
//some stuff
Map<String, ?????> customMapForTest = new HashMap<>();
customMapForTest.add("customKey", ClassX.class);
因此,根据我的设置,我将拥有某些我想使用的某些 classes 的模板图之类的东西。
这样的事情可能吗?如果我想在 map 中存储这种 .class 文件,它是如何调用的?
为了更深入地了解情况,我有自己的应用程序//别担心,这不是一个 public 项目或其他东西.. 只是为了试验。 我有一个包含这样一些字符的文件:X7WE2C3AD4A2 只是一些随机的东西。 现在我有一个文件 reader 读取每个字符并基于它搜索我创建的地图,获取该文件的 class 并创建该 class 的新实例并添加一些值基于类型。
示例:
customMapForTesting.get("X").getClass().getDeclaredConstructor(int.class,String.class).newInstance(numberVariable, stringVariable);
我将新实例存储到不同的地图并将其用于其他一些东西。 问题是我需要所有可能的对象来扩展我的模板,我不想在 templateMap 中存储实例...
java.lang.Class
类型就是你要找的
Map<String, Class<?>> map = new HashMap<>();
map.put("string",String.class);
请注意,int.class
不同于 Integer.class
System.out.println(int.class.equals(Integer.class)); //false
System.out.println(int.class.equals(Integer.TYPE)); //true