【发布时间】:2010-10-03 06:12:57
【问题描述】:
在 Java 中,数组就是对象。我的问题是......创建新数组时是否调用了 Object 构造函数?我们想使用这个事实来使用一些额外的字节码来检测对象构造函数,以检查正在构造的数组的长度。这行得通吗?
【问题讨论】:
标签: java arrays object instrumentation construction
在 Java 中,数组就是对象。我的问题是......创建新数组时是否调用了 Object 构造函数?我们想使用这个事实来使用一些额外的字节码来检测对象构造函数,以检查正在构造的数组的长度。这行得通吗?
【问题讨论】:
标签: java arrays object instrumentation construction
我不这么认为,因为你不能派生一个原生数组来覆盖构造函数
【讨论】:
根据JVM spec:“数组是使用一组不同的指令创建和操作的。”因此,虽然数组是对象的实例,但它们的初始化方式与其他对象的初始化方式不同(如果从该链接锚点向上滚动,您可以看到)。
【讨论】:
您可以使用字节码操作将检查放置在创建新数组的位置。
【讨论】:
不。我在 AspectJ 邮件列表中找到了这个:http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg02975.html。
您可能出于某种原因询问数组,但如果可以,为什么不切换到集合类。这将为您提供大量拦截和验证的机会。
【讨论】:
就Java语言规范而言,虽然两者都使用new关键字,但Class Instance Creation Expressions和Array Creation Expressions是不同的表达形式,每一种都有自己的规则。数组创建表达式的描述没有提到调用构造函数。
【讨论】: