Java:Class <! - ? - > vs. Class

时间:2018-03-12 11:45:11

标签: java generics

如果我们只讨论Class,就像在java.lang.Class中那样,真正之间的区别是什么,比如说

Map<Class<?>, Class<?>>

Map<Class, Class>

对于其他类型的名称,例如List(根本不是这个问题),通配符会有所不同:你不能在{{1以类型安全的方式。由于编写Map会发出编译警告,但我仍然可以对其进行List<?>,我很想知道如果map.put(Integer.class, String.class)Class被使用它是否真的重要。

除了编译器警告之外,是否真的有必要通过具有Class<?>的代码并将其替换为Map<String, Class>

1 个答案:

答案 0 :(得分:4)

  

似乎没有&#34;编译与不编译&#34;在最一般的类案例中。

事实并非如此。 ClassClass<?>遵循与ListList<?>相同的限制,或针对该问题的任何其他通用类型。

例如,这两个版本的编译方式与ClassClass<?>示例一样好。

List<?> integerList = new ArrayList<Integer>();
List<?> stringList = new ArrayList<String>();
Map<List, List> map = new HashMap<>();
map.put(integerList, stringList);

Map<List<?>, List<?>> map = new HashMap<>();
map.put(integerList, stringList);