使用Asm定義簡單的getter和setter很容易(幸運的是甚至可以在其常見問題中解釋它)。但是有一件事沒有提到,而且我一直無法找到文檔,那就是如何使用泛型類型信息來實現這些。使用Asm字節碼生成器(ClassWriter)生成具有泛型類型的方法
我實際上能夠很容易地確定泛型類型信息(因爲代碼將採用現有的字段和/或方法,並且存在完整的泛型類型處理和分辨率)。我只需要爲包含泛型類型的類型生成泛型版本。我希望這與修改Asm ClassWriter/MethodVisitor調用的簽名一樣簡單,但文檔中的某些註釋表明它可能並不那麼容易(因爲泛型信息存儲在與常規信息不同的地方)。看起來入口點是「ClassWriter.visitField/Method(....,String signature) - 注意它是包含正常的非泛型類信息的」描述「,但是術語」簽名「 (在JLS中)專指泛型 - 包括類型信息
這很有用,謝謝。我現在的具體問題似乎是結果簽名不能正確寫入類文件,儘管我使用了正確的格式(據我所知)。 但是,也許我應該仔細檢查SignatureWriter以確保... – StaxMan 2010-07-29 22:03:16
@StaxMan:我也遇到了麻煩。也許這篇文章將有助於:[Classworking toolkit:泛型與ASM](http://www.ibm.com/developerworks/java/library/j-cwt02076.html) – 2010-07-29 22:07:57
啊!我終於在代碼中發現了真正的問題:我在ClassVisitor.visit()中有參數V1_2;對於要支持的泛型(和註釋),這需要V1_5或更高版本。謝謝你的幫助! – StaxMan 2010-07-30 06:25:57