如果我们只讨论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>
?
答案 0 :(得分:4)
似乎没有&#34;编译与不编译&#34;在最一般的类案例中。
事实并非如此。 Class
和Class<?>
遵循与List
和List<?>
相同的限制,或针对该问题的任何其他通用类型。
例如,这两个版本的编译方式与Class
和Class<?>
示例一样好。
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);