2013-10-28 15 views
12

Tôi đang làm việc trên một dự án phân tích Bytecode, mà tôi đang sử dụng ASM. Mọi thứ diễn ra tốt đẹp, tôi có thể phân tích cú pháp, nhận thông tin về lớp và phương thức thành công.Phân tích Bytecode trong Java

Nhưng tôi bị mắc kẹt trong việc hiểu biểu diễn bytecode cho Generics. Dưới đây là một ví dụ từ java.util.list khi tôi sử dụng visitMethod từ ClassVisitor để in các thông tin, đây là những gì tôi nhận được cho một trong những chữ ký của phương pháp:

(ILjava/util/Collection<+TE;>;)Z 

Ở đây tôi đang cố gắng để tháo rời từng cái một và tìm hiểu đối số của phương pháp này:

  • I đứng cho int
  • Ljava/util/Collection đứng cho nó là một đối số kiểu Collection

Nhưng tôi bị kẹt ở loại generics tức là <+TE> vv Bất kỳ ai cũng có thể hướng dẫn tôi không? Tôi đã cố gắng tìm kiếm nhưng không có đủ thông tin. Nếu có ai có danh sách tên bytecode, bạn có thể chia sẻ với tôi không?

Trả lời

12

Các + đứng cho generic extends trong khi TE có nghĩa là có một loại var E

Do đó trong mã nguồn nó sẽ trông giống như:

Collection<? extends E> -> Ljava/util/Collection<+TE;> 

Hãy xem phần asm user guide 4.1.1 Generics -> Metadata

+0

Tuyệt vời và cảm ơn. Điều này là đủ, tôi sẽ đưa nó về phía trước. :) –

Các vấn đề liên quan