2013-10-28 22 views
12

Pracuję nad projektem analizy kodu Bytekodu, dla którego używam ASM. Wszystko idzie dobrze, potrafię parsować, uzyskać informacje o klasach i metodach.Analiza kodu bajtowego w Javie

Ale utknąłem w zrozumieniu reprezentacji kodu bajtowego dla Generics. Oto jeden z przykładów z java.util.list kiedy używam visitMethod z ClassVisitor aby wydrukować informacje, to co ja trafiam do jednej z podpisem danej metody to:

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

tutaj próbuję demontować pojedynczo i zrozumieniu argumenty metody:

  • I podpórek int
  • Ljava/util/Collection trybuny za to argument typu Collection

Ale utknąłem w typie generycznym, tj. <+TE> itd. Czy ktoś może mnie prowadzić? Próbowałem szukać, ale nie mam wystarczających informacji. Jeśli ktoś ma listę nazw kodów bajtowych, czy możesz mi ją udostępnić?

Odpowiedz

12

W + oznacza generycznego extends natomiast TE oznacza, że ​​nie jest typem var E

Tak więc w kodzie źródłowym będzie wyglądać następująco:

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

Spójrz na odcinku asm user guide 4.1.1 Ogólne -> Metadane

+0

Świetne i dzięki. To powinno wystarczyć, wezmę to do przodu. :) –

Powiązane problemy