澜色海湾 2023-02-14 16:28 采纳率: 87.5%
浏览 25
已结题

为啥 Object 类型可以强转成 Object[ ]类型,而 String 类型 却没法强转成 String[ ]类型呢?

最近在用 Hibernate 级联查询之后需要将数据查出来先转换成 Object[ ]类型,然后重新封装到实体类的时候遇到个问题 -> 为啥 Object 类型可以强转成 Object[ ]类型,而 String 类型 却没法强转成 String[ ]类型呢?

前面代码省略...........
        Query query = session.createQuery("......");  // hql 查询语句省略......
        
        List<String> list1 = query.list();
        String[ ] stringArr =  (String[ ])list1.get(0);  **//报错 - String 无法转换成 String[ ] 类**

        List<Object> list2 = query.list();
        Object[ ] objectsArr = (Object[ ])list2.get(0);
  • 写回答

3条回答 默认 最新

  • 量化研究所 2023-02-14 19:14
    关注

    Java 中的类型转换通常需要遵循类型兼容性的原则。在这个原则下,一个数据类型可以强制转换为另一个数据类型,但是必须满足以下条件之一:

    目标类型是源类型的子类;
    目标类型和源类型都是原始类型,且它们之间可以自动转换;
    目标类型和源类型都是引用类型,且它们之间存在转换关系。
    对于 Object 类型,它是所有 Java 对象的基类,因此可以强制转换为任何其他对象类型,包括 Object[]。但是对于 String 类型,它是一个 final 类型,即不可变类型,因此不能将其转换为 String[]。

    上面的代码中,List list1 获取的是一个字符串列表,因此不能直接将其强制转换为 String[] 类型。而 List list2 获取的是一个对象列表,由于 Object 是所有 Java 对象的基类,因此可以将其强制转换为 Object[] 类型,但在后续的代码中,需要将其转换为实际需要的类型,如 String 等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加