如何制作.class的地图?

时间:2015-10-23 15:06:53

标签: java generics reflection

我是Java Reflection和泛型的新手,我正在努力理解它们。在这里,我遇到了一个问题。我可以制作列表和地图或其他东西..但我可以制作一个类的地图吗?

我有这个班级

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);

所以我会根据我的设置,使用某些我想要使用的类的模板地图。

这样的事情可能吗?如果我想在地图中存储这种.class文件,它会如何被调用?

为了了解情况,我有自己的应用程序//不要担心,这不是一个公共项目或其他东西......只是为了进行实验。 我有一个像这样的字符的文件:X7WE2C3AD4A2 只是一些随机的东西。 现在我有一个文件阅读器,它读取每个字符并在此基础上搜索我创建的地图,获取该文件的类并创建该类的新实例并根据类型添加一些值。

示例:

customMapForTesting.get("X").getClass().getDeclaredConstructor(int.class,String.class).newInstance(numberVariable, stringVariable);

我将新实例存储到不同的地图中并在其他一些内容中使用它。 问题是我需要扩展模板的所有可能对象,我不想在templateMap中存储实例......

1 个答案:

答案 0 :(得分:2)

您正在寻找

java.lang.Class类型

Map<String, Class<?>> map = new HashMap<>();
map.put("string",String.class);

请注意,int.classInteger.class

不同
System.out.println(int.class.equals(Integer.class)); //false
System.out.println(int.class.equals(Integer.TYPE)); //true