[英]Strange behavior when using Enum as type in Map
當我在地圖中使用枚舉作為類型時,如果我使用類型不同的鍵,則不會出現編譯時錯誤。 例如,在下面的代碼片段中,當我嘗試使用類型為String的鍵訪問地圖時,我預計會發生編譯時錯誤。
為什么在Map中使用泛型時泛型不提供編譯時安全性? 當我嘗試插入條目時,編譯時檢查有效。
使用List時,情況似乎並非如此,因為我遇到了編譯時錯誤。
考慮下面的代碼示例
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestEnumGeneric{
enum Sample{
A,B
}
enum Sample2 {
C,D
}
Map<Sample,String> someMap = new HashMap<Sample, String>();
Map<String,String> someOtherMap = new HashMap<String, String>();
List<Sample> someList = new ArrayList<Sample>();
public void testMapWithEnum() {
String value = someMap.get("123");
value = someMap.get(Sample2.C);
String value2 = someOtherMap.get(1);
//someMap.put("123","123");
//someList.add("123");
}
}
Map.get
的簽名是
V get(Object key);
因此它接受任何Object
但僅返回V
使用get
編譯時沒有錯。
NetBeans警告此用法:
對java.util.Map.get的可疑調用:給定對象不能包含String的實例(預期的Sample)
Map.put
的簽名是
V put(K key, V value);
因此,您必須使用正確的類型。
編輯:
引用JavaDoc:
如果此映射包含從鍵
k
到值v
的映射,使得(key==null ? k==null : key.equals(k))
,則此方法返回v
; 否則返回null
。
只是key.equals(k)
,它們不必是同一類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.