java - 为什么我不能在 Java 中将 Object[] 转换为 StringBuilder[]?

标签 java casting toarray

ArrayList<StringBuilder> al = new ArrayList<>(
                              Arrays.asList(new StringBuilder[]{
                                  new StringBuilder("Oracle"), 
                                  new StringBuilder("Java"), 
                                  new StringBuilder("Sun"), 
                                  new StringBuilder("DataBase")}));

StringBuilder[] al2array = (StringBuilder[]) al.toArray();

如果al.toArray()返回 Object[]我知道它实际上是 StringBuilder[]那么为什么我不能施放它呢?

最佳答案

Java 无法知道(在编译时)Object[] 中存储了哪些对象。理论上,它可以包含 IntegerStringGrumpyCat,这将使强制转换为 StirngBuilder[] 错误 - 所以 java 根本不允许这样做。

但是,您可以使用重写的 toArray(StringBuilder[]) 来安全地执行此操作:

StringBuilder[] al2array = al.toArray(new StringBuilder[al.size]);

关于java - 为什么我不能在 Java 中将 Object[] 转换为 StringBuilder[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20246681/

相关文章:

java - 从 Java 读取 Microsoft Works 和/或 One Note 文件

使用 char 指针更改 int 值

java - 从包含 Arraylist 的 ArrayList 生成数组

java - GWT/Mysql/Java 连接数据库

java - Webjars + Spring Boot。自定义资源路径

java - 解析命令行并将其更改为 Char 或 Boolean

arrays - Laravel Scout toSearchableArray() 没有被调用?

java - list.toArray(T[] a),如果 "T"是 "runtime type"怎么办?

java - x mod -3 返回正数

java - Java 中的 Upcast 差异