java 泛型:获取具有泛型参数的类的类

2022-09-03 01:40:35

我很好奇如何使这项工作

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

答案 1

做一个野蛮的演员

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

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


答案 2

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

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

你可以来的最近的是

Class<Map> food = Map.class;

推荐