gpt4 book ai didi

java - 增加数组大小而不通过反射重新创建它

转载 作者:行者123 更新时间:2023-12-02 09:05:52 24 4
gpt4 key购买 nike

我知道数组有一个固定大小的字段。我可以通过反射(reflection)来编辑它以增加它的值(value)。但是,我不认为这是我必须通过反射编辑数组大小的唯一方法。我似乎无法在线找到 [L 的数组类的源代码.

当前进度:

Object[] foo = new Object[0];
Field field = foo.getClass().getField("size");

这会产生 NoSuchFieldException .

我试图像破解枚举那样破解 Java。虽然我不知道所有东西都存放在哪里。我确实可以访问反射工厂: https://www.niceideas.ch/roller2/badtrash/entry/java_create_enum_instances_dynamically

最佳答案

在不重新分配 Java 数组的情况下,不可能(安全地)更改它的大小。

数组的length“字段”根本不是字段。从语法上来说,这是一个特殊情况。在实现级别,它是数组对象 header 中的一个 32 位字。您无法使用反射更改单词中的值。如果您找到其他方法来更改它,则会带来麻烦(JVM 崩溃),因为:

  • 长度是阻止你写到数组末尾之外的原因,
  • 数组末尾之外的内存很可能用于表示其他对象,并且
  • 各种低级事物(例如 JIT 编译器和垃圾收集器)假设(正确!)数组对象的长度无法更改,并且可能将其缓存在 native 代码变量或寄存器中。

[trying to use reflection] .... results in a field not found exception.

这是因为 length 不是一个字段;见上文。

I cannot seem to find the source for the static array class online of [L

(这是long[]的类型名称)您将找不到它。它不存在。没有任何 Java 数组类型的 Java 源代码。

关于java - 增加数组大小而不通过反射重新创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816539/

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