java泛型:使用泛型参数获取类的类

时间:2013-11-15 21:21:04

标签: java generics

我很好奇如何做这项工作

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

这显然不起作用。我想要这样的东西

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

但这似乎不是一个有效的java sytax。

如何使这项工作?

修改: 我想要这个的原因是因为我有这样的方法

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

2 个答案:

答案 0 :(得分:6)

做一个暴力演员

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

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

答案 1 :(得分:4)

根据JLS, Section 15.8.2,你不能这样做,因为:

  

C.class的类型,其中C是类,接口或数组类型(第4.3节)的名称,是Class&lt; C&gt;。

你最接近的是

Class<Map> food = Map.class;