Java 调用Map#put()时编译器关于原始类型的警告

Java 调用Map#put()时编译器关于原始类型的警告,java,generics,compiler-warnings,Java,Generics,Compiler Warnings,我构建了一个Java类来接收泛型对象 “仅类”字段设置为: private Map map = new HashMap<T,Integer>(); 在这里您可以看到编译器抱怨的地方: 改变 private Map map = new HashMap(); 到 您的方法的缺点可以在您的方法的第3行看到,其中需要向下转换。显然,如果键值对已被不同的值类型替换,则这可能导致类CastException。(在本例中,您正在向下转换为int,这是无效的) 通过参数化映射,您将强制包含在其中

我构建了一个Java类来接收泛型对象

“仅类”字段设置为:

private Map map = new HashMap<T,Integer>();
在这里您可以看到编译器抱怨的地方:

改变

private Map map = new HashMap();

您的方法的缺点可以在您的方法的第3行看到,其中需要向下转换。显然,如果键值对已被不同的值类型替换,则这可能导致类CastException。(在本例中,您正在向下转换为
int
,这是无效的)


通过参数化映射,您将强制包含在其中的对象类型(或要使用的键类型)

已声明的映射类型是未经参数化的接口,编译器将根据声明的类型而不是实际类型进行检查。

如果要正确使用泛型,如果仅在实例化(=通过调用
new
操作符创建新对象)
new HashMap()
中使用它们是不够的,但还应使用泛型声明变量:

private Map<T,Integer> map = new HashMap<T,Integer>();
Map是一种原始类型。对泛型类型映射的引用应参数化


这正是我写的。最好从警告出现的第一行开始阅读警告。

你的回答是正确的,但是我担心这对OP没有什么帮助。你给他鱼而不是给他鱼竿。。。我希望实际的答案能真正解释错误信息背后的原因。我不相信你真的得到了你所说的信息。我相信事实上您会得到“类型安全:方法put(Object,Object)属于原始类型映射”。
private Map<Type1, Type2> map = new HashMap<>();
private Map<Integer, String> map = new HashMap<>();
private Map<T,Integer> map = new HashMap<T,Integer>();
private Map<T,Integer> map = new HashMap<>();
private Map map = new HashMap<T,Integer>();