12

私は ASM を使用しているバイトコード分析プロジェクトに取り組んでいます。すべてが順調に進んでおり、クラスとメソッドの情報を正常に解析して取得できます。

しかし、ジェネリックのバイトコード表現を理解するのに行き詰まっています。fromjava.util.listを使用して情報を出力するときの例を次に示します。これは、メソッドの署名の 1 つに対して取得しているものです。visitMethodClassVisitor

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

ここでは、1 つずつ逆アセンブルして、メソッドの引数を理解しようとしています。

  • Iintの略
  • Ljava/util/Collection型の引数であることを表しますCollection

しかし、私はジェネリック型<+TE>などで立ち往生しています。誰かが私を導くことができますか? 検索してみましたが、十分な情報が得られませんでした。誰かがバイトコード名のリストを持っている場合は、私を共有してもらえますか?

4

1 に答える 1

12

+ジェネリックextendsを表し、TEは型 var があることを意味しますE

したがって、ソース コードでは次のようになります。

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

asm ユーザー ガイドのセクション 4.1.1 Generics -> Metadataを参照してください。

于 2013-10-28T10:35:45.753 に答える