繁体   English   中英

通过java.lang.Object检测数组

[英]Instrumenting Array via java.lang.Object

我目前正在开发一个平台,它通过ASM库大量使用动态字节码修改例程。 除了数组类之外,我已经能够成功地检测所有必需的系统类。 (即String [],int []等)这是因为数组类本身是一个动态类型,因此据我所知,rt.jar中实际上没有类文件。

但是,我确实发现即使是数组类型也扩展了java.lang.Object,所以虽然修改Object类会不太理想,但不仅仅是因为它会导致任何更改传播到所有子类,它可能会允许我间接地为数组类添加了一个额外的原始字段,顺便说一句,这是我想要实现的。

除了我提到的显而易见的警告,这会引起任何其他与平台相关的问题吗?

而不是检测Object,最简单的方法是用您选择的编译版本替换它。 假设这有效,您可以对其进行检测以使其更加便携。

注意:我发现JVM不喜欢Object有其他方法(如果你添加多个,你会得到奇怪的错误)

您可能难以获得和设置该字段。

JVM规范中关于getfieldputfield指令的描述(如果我理解正确的话)说明它们不能在数组上使用。 引用,对于getfield

objectref的类型不能是数组类型。

putfield

objectref类不能是数组。

但是,'如果在运行时不满足指令描述中的某些约束(“必须”或“必须不”),则Java虚拟机的行为是未定义的,因此它可能正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM