【发布时间】:2011-03-16 02:36:23
【问题描述】:
使用 Asm 很容易定义简单的 getter 和 setter(幸运的是,它甚至在他们的 FAQ 中都有解释)。但是有一件事没有提到,而且我一直找不到文档,那就是如何使用泛型类型信息来实现这些。
我实际上能够很容易地确定泛型类型信息本身(因为代码将采用现有的字段和/或方法,并且存在完整的泛型类型处理和解析)。我只需要为包含泛型类型的类型生成泛型版本。
我希望这与修改签名 Asm ClassWriter/MethodVisitor 调用一样简单,但文档中的一些 cmets 表明它可能并不那么容易(因为泛型信息存储在与常规信息不同的位置)。
EDIT:看起来入口点是“ClassWriter.visitField/Method(...., String signature) - 注意它是包含普通非泛型类信息的“描述”,但是术语“签名”(在 JLS 中)专门指泛型,包括类型信息。
【问题讨论】:
标签: java generics code-generation bytecode java-bytecode-asm