Map <! - ?,? - >在Java中是什么意思?

时间:2011-07-21 14:44:42

标签: java generics collections map

Map<?, ?>在Java中意味着什么?
我看过网上但似乎找不到任何文章。

编辑:我在MP3 Duration Java

上找到了这个

5 个答案:

答案 0 :(得分:10)

Map<?,?>表示在编译时,您不知道Map的键和值对象的类类型是什么。

它是一个通配符类型。 http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html

答案 1 :(得分:4)

?表示您不感兴趣的占位符(通配符):

HashMap<?, ?> foo = new HashMap<Integer, String>();

由于?是一个通配符,您可以跳过它并仍然得到相同的结果:

HashMap foo = new HashMap<Integer, String>();

但它们可用于指定或子集要使用的泛型。在此示例中,第一个泛型必须实现Serializable接口。

// would fail because HttpServletRequest does not implement Serializable
HashMap<? extends Serializable, ?> foo = new HashMap<HttpServletRequest, String>(); 

但是使用具体类而不是这些通配符总是更好。如果你知道自己在做什么,那么你应该只使用?

答案 2 :(得分:1)

自Java5以来,Generics提供了该语言。 http://download.oracle.com/javase/tutorial/java/generics/index.html

符号表示您正在创建的Map将接受A类对象作为键,B类对象作为值。

这有助于您作为开发人员,因此您不会再将对象强制转换为正确的类。因此,您将无法使用除A之外的键和除B之外的其他对象的映射。避免丑陋的强制转换并提供编译时约束

答案 3 :(得分:1)

Map<?,?>告诉您,您可以在地图中使用keyvalue的每个对象。

但通常使用类似的泛型更有用:

Map<String, YourCustomObject> map

因此,在此地图中,您只能put String作为键,YourCustomObject作为值。

请参阅有关泛型的tutorial

答案 4 :(得分:0)

?是泛型中的通配符。太阳......呃...... Oracle有一个关于泛型的很好的教程here。有一个关于通配符的单独部分。

如果您在问题中发布了更多背景信息,例如您看到Map<?, ?>的位置,则可能会得到更好的答案。