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

Sur*_*rya 8 java generics

我很好奇如何使这项工作

 Class<Map<String,String>> food = Map.class;
Run Code Online (Sandbox Code Playgroud)

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

 Class<Map<String,String>> food = Map<String,String>.class;
Run Code Online (Sandbox Code Playgroud)

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

怎么能让这个工作?

编辑:我想要这个的原因是因为我有这样的方法

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

我想这样称呼它

ConfigValue<Map<String,Object>> config = getSectionConfig("blah", Map<String,Object>.class>);
Map<String,Value> val = config.value();
Run Code Online (Sandbox Code Playgroud)

Zho*_*gYu 7

做一个粗暴的演员

    Class<Map<String,String>> clazz = 
             (Class<Map<String,String>>)(Class)Map.class;
Run Code Online (Sandbox Code Playgroud)

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


rge*_*man 4

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

\n\n
\n

C.class 的类型为 Class<C>,其中 C 是类、接口或数组类型 (\xc2\xa74.3) 的名称。

\n
\n\n

你能到达的最接近的是

\n\n
Class<Map> food = Map.class;\n
Run Code Online (Sandbox Code Playgroud)\n