假设我在Scala中有如下代码
object Foo {
var functions: List[String => String] = Nil // can be any type to any type.
def addFunc(f:String => String) = functions = f :: functions
}
在运行时,我得到了添加了一些函数的Foo
。现在我想构造一个新的.class文件,在Scala中实现如下内容:
object MyObject {
def process1(s:String) = // call Foo.functions(1)
}
然后我想保存MyObject
的字节码,可以在以后执行,即使Foo
不存在。
以上只是一个例子,以显示我想做什么。我的名字是MyObject
, process1
,我必须生成一个可执行文件MyObject.class
。不需要MyObject
的源代码(它很可能是Java源代码)。
因此,在高层次上,我们需要获取Foo.function(1)
的内存"快照",将该快照转换为要存储的字节码,并使用此生成MyObject
的字节码。
我发现的所有字节码工程库都太低级了,所以我想知道是否有一个更高级别的库可以让我处理抽象对象,如函数等
您看过ASM的Tree模型吗?我以前只使用过Event模型,但Tree听起来正是您要找的。您可以在ASM用户指南的1.2.2节中找到概述(PDF-我认为没有HTML版本,否则我会链接它)。
我还将推荐ASM框架。AOSD'07上有一篇关于用ASM实现通用字节码转换模式的论文。章节"将两个类合并为一个"one_answers"内联方法"描述的字节码转换非常接近你的