我正在尝试使用自定义类作为Map<String, Class<?>>
. 以下是代码的相关部分:
以下是 Map 的声明和初始化main()
:
public static Map<String, Class<?>> mapQuery2ResponseType = new HashMap<String, Class<?>>();
static {
mapQuery2ResponseType.put("string1", CustomClass1.class);
mapQuery2ResponseType.put("string2", CustomClass2.class);
mapQuery2ResponseType.put("string3", CustomClass3.class);
}
现在我正在使用此映射将对象类型转换为这些类之一:(假设所有类都包含一个getName()
返回 a的方法String
)
String name = (
(
mapQuery2ResponseType.get("string1")
)obj1
).getName();
其中,obj1
是泛型类型T
,
但它不允许我这样做并说:Syntax error on token "obj1", delete this token
。
请帮助我了解我在哪里做错了?
Edit:
当我使用以下代码时,它完美地给了我预期的结果,
String name = (
(
CustomClass1
)obj1
).getName();
并且与返回的obj1
类型相同mapQuery2ResponseType.put("string1", CustomClass1.class);
。
在这里我可以看到一件事......如果我直接使用 use 它,我将它用作"CustomClass1"
,而如果我从 map by 获取它mapQuery2ResponseType.get("string1")
,它会返回"CustomClass1.class"
。我不确定这两种方法是否有区别?如果有,它是什么?
所以实际上不会有任何转换,只是我将它用于大量类,因此尝试使用通用方法。
Edit2:
正如这个问题中给出的:Java:“CustomClass1”和“CustomClass1.class”之间的区别?,我认为,反射是这项任务的唯一解决方案。但是任何人都可以解释如何使用反射来做到这一点吗?