一个奇怪的问题是:为什么enumMap的构造函数中需要enum.class? 它知道它的类型,因为它传递给模板...
意思是,为什么我们必须使用:EnumMap<E,V> e = new EnumMap<E,V>(E.class);
,我们只能使用:EnumMap<E,V> e = new EnumMap<E,V>();
答案 0 :(得分:4)
“它知道它的类型,因为它传递了模板......”
Java中不存在模板的概念。在类型检查期间使用泛型但在运行时期间不使用该数据,这意味着在运行时期间实际代码将为EnumMap e = new EnumMap()
。
据推测,该类用于确定初始化地图大小的唯一枚举值的数量,并且因为该信息无法通过类型系统传递给类(由于泛型的限制),您需要传递精确的{ {1}}实例。