gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:07:33 25 4
gpt4 key购买 nike

我构建了一个接收通用对象的 Java 类;

仅类字段设置为:

private Map map = new HashMap<T,Integer>();

我的问题是,在我编写的某些方法中,当我调用 put 时HashMap 对象的方法和编译器警告我并显示以下消息:

Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type Map<K,V> should be parameterized

我更喜欢避免编译器警告,因为它可能会导致运行时错误。

如果您能向我解释该消息以及我需要做什么来消除它,我将很高兴。

我写的方法是:

public void addItem(T item) {
if (this.map.containsKey(item)) {
this.map.put(item, (int)this.map.get(item) + 1);
}
else {
this.map.put(item, 1);
}
}

在这里你可以看到编译器提示的地方:

Code screenshot

最佳答案

改变

private Map map = new HashMap();

private Map<Type1, Type2> map = new HashMap<>();

其中 Type1Type2 是 map 的 keyvalue 的类名称(分别)

例如,声明由 Integer 索引的 String 值的映射:(请注意,您不能使用原始类型)

private Map<Integer, String> map = new HashMap<>();

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

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

关于java - 调用 Map#put() 时关于原始类型的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com