2013-11-15 287 views
3

我很好奇如何使这项工作Java泛型:获得类的类与泛型参数

Class<Map<String,String>> food = Map.class; 

这显然是行不通的。我想这样的事情

Class<Map<String,String>> food = Map<String,String>.class; 

但这似乎不是一个有效的Java联合体。

如何使这项工作?

编辑: 我想这样做的原因是因为我有这样

protected <ConfigType> ConfigValue<ConfigType> getSectionConfig(String name, Class<ConfigType> configType) { 
     return config.getConfig(name); 
    } 

的方法,我想叫这个为使

ConfigValue<Map<String,Object>> config = getSectionConfig("blah", Map<String,Object>.class>); 
Map<String,Value> val = config.value(); 
+3

你为什么要这个? –

+2

Map .class'不能存在。描述该签名的'Type'可以通过,并且可以使用[super type token](http://gafter.blogspot.sk/2006/12/super-type-tokens.html)来获取该类型,但'Type'没有'Class'的反射能力。 – millimoose

+0

如何使它工作或如何使它开玩笑? – 2013-11-15 21:27:49

回答

4

按照JLS, Section 15.8.2,你不能这样做,因为:

该类型C.class,其中C是类,接口或数组类型(§4.3)的名称,是类<C>。

你能来最接近的是

Class<Map> food = Map.class; 
+0

这是我目前的,但它不完全类型安全,我必须做铸造。 : - \ – Surya

0

做一个畜生投

Class<Map<String,String>> clazz = 
      (Class<Map<String,String>>)(Class)Map.class; 

这不是理论上是正确的,但它不是我们的错。我们有时需要这样的黑客。