使用 Asm 字节码生成器生成泛型类型的方法(类编写器)
2022-09-04 22:49:39
使用 Asm 定义简单的 getter 和 setters 很容易(幸运的是,它甚至在他们的 FAQ 中进行了解释)。但是有一件事没有提到,而且我一直找不到文档,那就是如何使用泛型类型信息实现这些。
实际上,我能够很容易地确定泛型类型信息本身(因为代码将采用现有的字段和/或方法,并且存在完整的泛型类型处理和解析)。我只需要为包含泛型类型的类型生成泛型版本。
我希望这像修改签名Asm ClassWriter/MethodVisitor调用一样简单,但是文档中的一些注释表明这可能并不容易(因为泛型信息存储在与常规信息不同的位置)。
编辑:看起来入口点是“ClassWriter.visitField/Method(....,字符串签名) - 请注意,它的”描述“包含正常的非泛型类信息,但术语”签名“(在JLS中)特指泛型 - 包括类型信息。