Mono.Cecil 或 .NET 反射的 Java 等效项,可访问 MSIL 代码

标签 java reflection bytecode

我想我会在未来的代码中自动进行错误检测,前提是我们的一些代码需要显式释放连接对象,因为我们认为我们使用的 Java HTTP API 中存在错误(具体是哪个 API 并不重要)。

这个想法很简单:对于类 A 上的每个方法,如果该方法调用一个返回类型可从 Response 分配的方法,则该方法还应该调用 close( ) 返回值。所有这一切都没有在被检查的类中实际运行任何代码。

请原谅我的咆哮,但只是想说我不想说的话:我发现 http://asm.ow2.org/ ,它提供了对我需要的字节码的访问,但是:该 API 似乎是为字节码操作量身定制的(没有纯粹的内省(introspection)),并且它顽固地基于访问者模式,这使得几乎不可能通过我的 IDE 发现其工作原理自动完成,并且所有访问 *() 方法都没有真正将字节码语义与 Java 对象结合起来,而是将方法签名和返回类型签名混合在一起。我什至不确定字节码是否在某处定义了任何常量。

虽然我能够使用它,但它真的很优雅。我想知道还有哪些其他 Java 库的理念与 Mono.Cecil 和 .NET 自己的 System.Reflection.MethodBody 对象更相似?

最佳答案

不幸的是,ASM 和 BCEL 几乎是黄金标准字节码操作库。如果您不喜欢它们,您可能必须自己修改它们或采取不同的方法。

编辑:Soot 是另一个主要的字节码操作库。你可以尝试一下。

我对 ASM 和 BCEL 不太熟悉,但我已经编写了自己的字节码操作工具,可以在 Github 上找到。不幸的是,它们 A) 是用 Python 编写的,而不是 Java,B) 几乎没有文档记录。

我认为最好的方法是修改 validator 以向类型添加一些额外的元数据。 validator 已经做了类似的事情来确保对象正确初始化,因此修改它以确保对象关闭并不困难,只要关闭状态可以静态地表示为类型系统的一部分(即它们在关闭之前仅存储在局部变量中,并且不与已关闭的对象混合)。

关于Mono.Cecil 或 .NET 反射的 Java 等效项,可访问 MSIL 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484843/

相关文章:

java - Android 矩形相交

java - 方法调用与基于反射的事件系统

java - 动态重新加载 jar 文件内容

c# - 非静态方法需要 objective-c #

c# - 我可以创建一个仅包含对象类型的空值的 JSON 示例吗?

java - dup 和 dup_x2 之间的区别

c# - 是否有 .NET 类来处理加密?

java - 当已经通过 ldap Spring 3.0 进行身份验证时,如何获取 Active Directory 组?

java - 从 BigDecimal 获取约简分数

java - netbeans freermarker 插件错误 : The plugin Lexer to NetBeans Bridge is requested in implementation version