Map <?,?>在Java中意味着什么?

dav*_*rld 6 java generics collections map

Map<?, ?>Java 中的含义是什么 ?
我看过网上但似乎找不到任何文章.

编辑:我在MP3 Duration Java上发现了这个

Kal*_*Kal 10

Map<?,?> 意味着在编译时,您不知道Map的键和值对象的类类型是什么.

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


man*_*ana 6

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

HashMap<?, ?> foo = new HashMap<Integer, String>();
Run Code Online (Sandbox Code Playgroud)

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

HashMap foo = new HashMap<Integer, String>();
Run Code Online (Sandbox Code Playgroud)

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

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

但是,最好使用具体类代替这些通配符。仅?在知道自己在做什么时才应使用:)

  • Raw类型与通配符的结果不同!一点也不! (3认同)
  • 通配符的意思是“这是一幅地图,其中包含某种特定类型的受约束的事物,但我不知道它是什么。” 原始类型只是原始类型,对此一无所知,没有约束,里面可能有任何东西。编译器不允许您将内容添加到Map &lt;?,?&gt;中,但是您可以将所需的任何内容放入原始Map中。 (3认同)