[英]What does Map<?, ?> mean in Java?
Map<?,?>
表示在編譯時,不知道 Map 的鍵值 object 的 class 類型是什么。
它是一種通配符類型。 http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html
?
表示您對其值不感興趣的占位符(通配符):
HashMap<?, ?> foo = new HashMap<Integer, String>();
而從?
是通配符,你可以跳過它,仍然得到相同的結果:
HashMap foo = new HashMap<Integer, String>();
但它們可用於指定或子集要使用的 generics。 在這個例子中,第一個泛型必須實現 Serializable 接口。
// would fail because HttpServletRequest does not implement Serializable
HashMap<? extends Serializable, ?> foo = new HashMap<HttpServletRequest, String>();
但是使用具體類而不是這些通配符總是更好。 你應該只使用?
如果你知道你在做什么:)
從 Java5 開始,語言提供了 Generics。 http://download.oracle.com/javase/tutorial/java/generics/index.html
The notation means that the Map you are creating, will accept an object of class A as a key and an object of class B as a value.
這有助於您作為開發人員,因此您不會再將 Object 轉換為正確的 class。 因此,您將無法將 map 與 A 以外的鍵和 B 以外的對象一起使用。避免丑陋的強制轉換並提供編譯時間限制
Map<?,?>
告訴您可以使用每個 object 作為 map 中的key
和value
。
但通常像這樣使用 generics 更有用:
Map<String, YourCustomObject> map
所以在這個 map 中,您只能put
String
作為 key, YourCustomObject
作為 value。
請參閱有關 generics 的本教程。
這? 是 generics 中的通配符。 Sun...er...Oracle 在這里有一個關於 generics 的很好的教程。 關於通配符有一個單獨的部分。
如果您在問題中發布更多上下文,例如您在哪里看到Map<?, ?>
您可能會得到更好的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.