最近在用 Hibernate 级联查询之后需要将数据查出来先转换成 Object[ ]类型,然后重新封装到实体类的时候遇到个问题 -> 为啥 Object 类型可以强转成 Object[ ]类型,而 String 类型 却没法强转成 String[ ]类型呢?
前面代码省略...........
Query query = session.createQuery("......"); // hql 查询语句省略......
List list1 = query.list();
String[ ] stringArr = (String[ ])list1.get(0); **//报错 - String 无法转换成 String[ ] 类**
List
Java 中的类型转换通常需要遵循类型兼容性的原则。在这个原则下,一个数据类型可以强制转换为另一个数据类型,但是必须满足以下条件之一:
目标类型是源类型的子类;
目标类型和源类型都是原始类型,且它们之间可以自动转换;
目标类型和源类型都是引用类型,且它们之间存在转换关系。
对于 Object 类型,它是所有 Java 对象的基类,因此可以强制转换为任何其他对象类型,包括 Object[]。但是对于 String 类型,它是一个 final 类型,即不可变类型,因此不能将其转换为 String[]。
上面的代码中,List list1 获取的是一个字符串列表,因此不能直接将其强制转换为 String[] 类型。而 List list2 获取的是一个对象列表,由于 Object 是所有 Java 对象的基类,因此可以将其强制转换为 Object[] 类型,但在后续的代码中,需要将其转换为实际需要的类型,如 String 等。
object类型是所有类型的基类
所以object[]也是object的一个子类
如果父类类型对象里存的本来就是一个子类对象,当然可以强制转换回来
而string和string[]完全就是两个东西,之间没有继承关系,这都不用等运行,编译就报错了