我正在寻找一种从现有文件生成类文件的方法,同时允许我用另一种类型替换字段的类型。
考虑这个示例片段,我想在其中每次使用int bar
...
class Foo {
private final int bar;
public Foo(int bar) {
this.bar = bar;
}
public int getBar() {
return bar;
}
public static int of(int bar) {
return new Foo(bar);
}
}
, long bar
像这样:
class Foo_Long {
private final long bar;
public Foo_Long(long bar) {
this.bar = bar;
}
public long getBar() {
return bar;
}
public static Foo_Long of(long bar) {
return new Foo_Long (bar);
}
}
我研究了多个字节码操作库,如 cglib、javassit 和 ASM,但它们似乎都专注于添加成员或用现有的不同方法体替换一个方法体。
有没有提供类似...的图书馆
byte[] rewriteFieldWithType(Class klazz,
Field field,
Class type,
String newClassName) { ... }
Field field = Foo.class.getDeclaredField("bar");
byte[] newClass = rewriteFieldWithType(Foo.class,
field,
java.lang.Long.TYPE,
"Foo_Long");
...以一种万无一失的方式?或者我是否需要实现所有丑陋的东西,比如修复元数据和替换方法主体中的不同字节码指令,例如iload
手动lload
?