gpt4 book ai didi

java - Array.newInstance() 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 11:07:10 30 4
gpt4 key购买 nike

我目前正在研究 Java 集合框架,我一直在问自己的一个有趣的问题是“所有这些集合如何实现 Collection#toArray 方法的通用版本”。从我在其他 SO 问题中读到的内容来看,它很可能使用 Array#newInstance .仅供引用,这就是 Array#newInstance 的声明方式:

public static Object newInstance(Class<?> componentType,
int... dimensions)
throws IllegalArgumentException,
NegativeArraySizeException

现在,我的问题是:如何使提供给该方法的信息足以生成指定类型的数组对象

多维方面并不难,因为人们总是可以将 N 维数组构造为 (N-1) 维数组的单维数组。真正让我烦恼的是如何创建 T[] 类型的对象来自Class<T>通过 Class<?> 传递的对象引用。

最佳答案

如果您考虑一下,在 Reflection API 中具有这样的功能是有意义的。当你执行 new SomeType[N] 时,编译器基本上编译成字节码,内容如下:创建一个新数组,组件类型为 SomeType,长度为 N.

因此 JVM 必须在运行时已经有某种机制来评估此类指令,给定给定的组件类型和长度,分配一个新数组。 new SomeType[N] 的唯一问题是组件类型是在编译时硬编码的。但是,如果在运行时给定类型,那么对于 JVM 来说并不困难,因为 JVM 具有采用该类型的运行时机制。由于没有允许您创建具有动态类型的数组的 native 语法,因此反射 API 提供了一种方法来执行此操作。

关于java - Array.newInstance() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29013598/

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