如何解决以下警告?

时间:2013-11-30 13:31:40

标签: java jsp

类型安全:方法put(Object,Object)属于原始类型HashMap。应该参数化对泛型类型HashMap的引用。

5 个答案:

答案 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?