类型安全:方法put(Object,Object)属于原始类型HashMap。应该参数化对泛型类型HashMap的引用。
答案 0 :(得分:3)
您的代码中可能有某处
Map map = new HashMap();
您应该使用hashmap中的键和值的类型对其进行参数化。例如,如果您使用String
个关键字SomeObject
个对象,则应使用:
Map<String, SomeObject> map = new HashMap<String, SomeObject>();
答案 1 :(得分:0)
使用泛型来定义您的收藏,如下所示。
List<String> list=new ArrayList<String> ();
对于您的情况,它是一张地图,因此您可以使用
Map<String,String> map=new HashMap<String,String>();
如果您将immutable
对象定义为keys
String class
答案 2 :(得分:0)
创建hashmap的正确方法是
HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
您可以将String和Integer替换为您想要的任何类。第一个是所有键必须的类,第二个是所有值必须的类。
答案 3 :(得分:0)
理想情况下,你不应该使用它。使用泛型集合类型时,您需要更加具体地了解要作为键和值对象放置在地图中的对象类型。泛型有助于强制执行所谓的编译时类型检查。
但是如果您仍然坚持使用它,那么请在您获取此警告的方法上使用@SuppressWarnings(“unchecked”)注释,或者在发出此警告的代码语句之上。但是,当您将对象从地图中获取并在代码中使用后,您可能需要投入对象的类型。由于在继承层次结构中出现错误类型的情况,代码中的问题只有在jvm抛出类种姓异常时才会在运行时可见。
答案 4 :(得分:0)
您有一个通用HashMap<T1, T2>
并尝试为其添加一个非T1和T2类型的键值对。即你有:
HashMap<T1, T2> map = ...;
Object o1
Object o2;
// ...
map.put(o1, o2); // generates warning
你想:
HashMap<T1, T2> map = ...;
T1 o1;
T2 o2;
// ...
map.put(o1, o2); // no warning - notice the types!
这是因为Java中的泛型只是模拟的。类型HashMap<T1, T2>
仅在编译时存在,并且实际上是一种更好的方式来声明您的旧的非泛型HashMap
。因此,它仍然具有原始的put(Object, Object)
方法。在其他语言中,例如C#,该方法不存在,而您将使用put(T1, T2)
方法。
有关详细信息,请参阅What is wrong with Java's generics?。