Map<?, ?>
在Java中意味着什么?
我看过网上但似乎找不到任何文章。
编辑:我在MP3 Duration Java
上找到了这个答案 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<?,?>
告诉您,您可以在地图中使用key
和value
的每个对象。
但通常使用类似的泛型更有用:
Map<String, YourCustomObject> map
因此,在此地图中,您只能put
String
作为键,YourCustomObject
作为值。
请参阅有关泛型的tutorial。
答案 4 :(得分:0)
?是泛型中的通配符。太阳......呃...... Oracle有一个关于泛型的很好的教程here。有一个关于通配符的单独部分。
如果您在问题中发布了更多背景信息,例如您看到Map<?, ?>
的位置,则可能会得到更好的答案。