java - 如何制作.class的 map ?

标签 java generics reflection

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

例如,我有这个类(class)

public class ClassA{}
public class ClassB extends ClassA{}
public class ClassC extends ClassA{} 

等等.. 现在我想要一个像这样的 map Map(); 在这张 map 中,我可以放置从 A 延伸的任何内容。那很好。但是如果我想存储这样的东西怎么办:

ClassX extends ClassA... 
//some stuff
Map<String, ?????> customMapForTest = new HashMap<>();
customMapForTest.add("customKey", ClassX.class);

所以我将有一些类似我想根据我的设置使用的某些类的模板映射的东西。

这样的事情可能吗?如果我想将这种.class文件存储在map中,该如何调用?

为了更深入地了解情况,我有自己的应用程序//别担心,这不是一个公共(public)项目或其他东西..只是为了实验。 我有一个包含一些字符的文件,如下所示:X7WE2C3AD4A2 只是一些随机的东西。 现在我有一个文件读取器,它读取每个字符,并基于它搜索我创建的映射,获取该文件的类并创建该类的新实例,并根据类型添加一些值。

示例:

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

我将新实例存储到不同的 map 中,并将其用于其他一些东西。 问题是我需要扩展我的模板的所有可能的对象,并且我不想将实例存储在 templateMap 中...

最佳答案

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

关于java - 如何制作.class的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305662/

相关文章:

c# - 如何创建包含特定类型的通用集合?

Java 泛型——需要解释

c# - 从字符串创建类实例和调用方法

java ee sdk下载找不到jdk

java - 无法在 Android 中解密加密的短信(在 2.2 操作系统中加密)...(尝试在 2.3 操作系统中解密)

JAVA HashMap 重复

java - 是否可以填充通用列表并从 java 中的方法返回它?

java - Scala 类字段上的 getAnnotations

reflection - ceylon 元模型

java - 构建快速的网络服务