gpt4 book ai didi

java - 从 InputStream 读取非泛型 HashMap 时发出警告

转载 作者:行者123 更新时间:2023-12-01 18:06:19 25 4
gpt4 key购买 nike

我有一个实例变量HashMap<String, Object> sessions;

我正在尝试读取 HashMap<String, Object> 的已保存实例来自输入流:

ObjectInputStream is = new ObjectInputStream(fis);
sessions = (HashMap<String, Object>) is.readObject();

但是在第二行我收到以下警告:

Unchecked cast: 'java.lang.Object' to 'java.util.HashMap<java.lang.String,java.lang.Object>'

它让我可以泛化这个类,但它什么也不做。我尝试将实例变量更改为原始的通用 HashMap并且还转换为原始 HashMap相应地,但是每当我尝试将任何内容放入 HashMap 时,我都会收到未经检查的警告,例如:

sessions.put("all", new ArrayList());

产量警告 Unchecked call to 'put(K, V)' as a member of raw type 'java.util.HashMap' .

我知道这些只是警告,不会在运行时产生问题,但为了正确性,我怎样才能摆脱所有警告?

我使用的是 Android Studio 2.0b7。

最佳答案

编译器无法知道您将在运行时从 ObjectInputStream 读取什么类型,因此如果您尝试显式转换它,您总是会收到未经检查的转换警告。

唯一的解决方案是添加@SuppressWarnings。最好专门为未经检查的强制转换添加一个局部变量,因为您可以仅注释此变量,而不是整个方法或类。

@SuppressWarnings("unchecked")
HashMap<String, Object> tmp = (HashMap<String, Object>) input.readObject();
sessions = tmp;

但是,您还应该检查您读取的对象 instanceof HashMap,以确保未经检查的强制转换至少部分安全(部分是因为您不知道值和键是否确实是安全的)您期望的类型 - 确保您可以迭代键以确保它们都是字符串)。

关于java - 从 InputStream 读取非泛型 HashMap 时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36171085/

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