类型安全:未选中从Object转换为ArrayList <MyVariable>

 Berlinale 发布于 2023-02-13 21:18

这是将ArrayList从服务器发送到客户端的程序的一部分.我想删除有关此代码中最后一行的警告:

客户代码:

Socket s;
(...)
// A server is sending a list from the other side of the link.
ois = new ObjectInputStream(s.getInputStream());
MyList = (ArrayList) ois.readObject();

MyVariable是一个具有一些属性的Java类.服务器正在创建一个ArrayList并用MyVariable变量填充它作为项目.然后它将完整列表发送给客户端.

我想知道为什么我会在那里发出警告以及如何完美编码以获得0警告.如果有可能我想避免使用"@SuppressWarnings("unchecked")".;)

谢谢,

路易斯

2 个回答
  • 试试这个

    Object obj = ois.readObject();
    // Check it's an ArrayList
    if (obj instanceof ArrayList<?>) {
      // Get the List.
      ArrayList<?> al = (ArrayList<?>) obj;
      if (al.size() > 0) {
        // Iterate.
        for (int i = 0; i < al.size(); i++) {
          // Still not enough for a type.
          Object o = al.get(i);
          if (o instanceof MyVariable) {
            // Here we go!
            MyVariable v = (MyVariable) o;
            // use v.
          }
        }
      }
    }
    

    2023-02-13 21:24 回答
  • 要避免这种警告是不可能的.readObject()返回一个Object.你需要施展它.并且转换为泛型类型将始终生成此类警告.

    如果你想让你的代码尽可能干净,这是一个好主意,你应该尊重Java命名约定,并使变量名以小写字母开头.

    2023-02-13 21:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有