如何在Java中声明一个Typed类?

时间:2015-10-29 10:24:20

标签: java generics

我需要声明一个Map.class的实例,但是地图是打字的...所以我需要这样的东西:

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

此行导致编译错误。表达这个的干净方式是什么?

3 个答案:

答案 0 :(得分:4)

你可以使用演员阵容。

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

这会生成警告,但会编译。

问题在于,由于类型擦除,运行时生成的对象与Map.class没有区别(它不知道类型)。

如果您需要一个真正代表Map<String, String>的对象,您可以使用java.lang.reflect.Type或番石榴TypeToken进行查看。

答案 1 :(得分:2)

import java.util.*;

public class Test{
  public static void main(String [] args){
   Class <Map> clazz = Map.class;
   System.out.println(clazz);
  }
}

将打印

  

interface java.util.Map

答案 2 :(得分:0)

Map<String, String> clazz = new HashMap<String, String>()

请记住,Map是一个界面,不能直接实例化,只能通过实现它的类来实现,例如HashMapTreeMap