Xác định getters và setters đơn giản dễ sử dụng Asm (và may mắn là nó được giải thích trong phần FAQ). Nhưng một điều không được đề cập, và tôi không thể tìm thấy tài liệu, là làm thế nào để thực hiện chúng bằng cách sử dụng thông tin kiểu chung chung.Tạo các phương thức với các kiểu generic với bộ tạo mã bytecode Asm (ClassWriter)
Tôi thực sự có thể tự xác định thông tin loại chung chung (vì mã sẽ lấy các trường và/hoặc phương thức hiện có và xử lý và giải quyết kiểu chung hoàn chỉnh). Tôi chỉ cần tạo ra phiên bản generics cho các loại có loại generic bao gồm.
Tôi hy vọng điều này dễ dàng như sửa đổi chữ ký Asm ClassWriter/MethodVisitor gọi, nhưng một số ý kiến trong tài liệu cho thấy nó có thể không được dễ dàng (như thông tin generics được lưu trữ ở nơi bit khác với thông tin thường xuyên).
EDIT: có vẻ như điểm vào là "ClassWriter.visitField/Method (...., Chữ ký chuỗi) - lưu ý rằng đó là" mô tả "có chứa thông tin lớp chung không bình thường, nhưng cụm từ" chữ ký "
Điều này rất hữu ích, cảm ơn. Vấn đề cụ thể của tôi ngay bây giờ có vẻ là chữ ký kết quả bằng cách nào đó không được viết đúng trong tệp lớp, mặc dù tôi sử dụng định dạng đúng (theo như tôi biết). Nhưng có lẽ tôi nên kiểm tra lại với SignatureWriter để đảm bảo ... – StaxMan
@StaxMan: Tôi cũng đã chia sẻ rắc rối với nó. Có lẽ bài viết này sẽ giúp: [Bộ công cụ phân loại: Generics with ASM] (http://www.ibm.com/developerworks/java/library/j-cwt02076.html) –
Ah! Tôi cuối cùng đã tìm thấy vấn đề thực sự trong mã của tôi: Tôi đã có đối số V1_2 trong ClassVisitor.visit(); và điều này cần phải được V1_5 trở lên để được hỗ trợ (và chú thích). Cảm ơn bạn đã giúp đỡ! – StaxMan