gpt4 book ai didi

使用来自reflect.Method的通用签名信息生成Java字节码

转载 作者:行者123 更新时间:2023-11-30 06:00:34 28 4
gpt4 key购买 nike

我正在尝试通过字节码从 java.lang.reflect.Method 生成方法签名。它的签名(通用类型)部分很棘手,因为反射 api 获取类型信息并将其转换为 asm 需要的内容并不简单。知道有任何代码可以做到这一点吗?

最佳答案

我不知道有什么工具可以自动执行此操作。我可能会使用org.objectweb.asm.util.ASMifierClassVisitor类来确定签名和 ASM API 调用之间的关系。

对于包含此代码的类:

  public void foo1(Object o1, String s2) {
}

...该工具将生成:

mv = cw.visitMethod(ACC_PUBLIC, "foo1",
"(Ljava/lang/Object;Ljava/lang/String;)V", null, null);
mv.visitCode();
mv.visitInsn(RETURN);
mv.visitMaxs(0, 3);
mv.visitEnd();

对于此代码:

  public static final String[] foo2() {
return null;
}

...它将生成:

mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
"foo2", "()[Ljava/lang/String;", null, null);
mv.visitCode();
mv.visitInsn(ACONST_NULL);
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 0);
mv.visitEnd();

method signatures in the FAQ 有注释如果您了解 Java class nomenclature 将会有所帮助.

请注意,ASM API 还可用于将 java.lang.reflect.Method 转换为 org.objectweb.asm.commons.Method 。既然你可以get the classjava.lang.reflect.Method 中,您可以使用 ClassVisitor s/MethodVisitor发送至inspect the methods .

关于使用来自reflect.Method的通用签名信息生成Java字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985030/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com