2013-10-28 15 views
12

Sto lavorando a un progetto di analisi Bytecode, per il quale sto utilizzando ASM. Tutto sta andando bene, sono in grado di analizzare, ottenere informazioni sulla classe e sul metodo con successo.Analisi bytecode in Java

Ma io sono bloccato nel comprendere la rappresentazione bytecode per Generics. Ecco l'un esempio da java.util.list quando uso visitMethod da ClassVisitor per stampare le informazioni, questo è quello che sto ottenendo per una delle firma del metodo:

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

Qui sto cercando di smontare uno per uno e la comprensione del argomenti del metodo:

  • I stand per int
  • Ljava/util/Collection stand per la sua un argomento di tipo Collection

Ma io sono bloccato al tipo generico, ad esempio <+TE> ecc. Qualcuno può guidarmi? Ho provato a cercare ma non ho avuto abbastanza informazioni. Per favore, se qualcuno ha un elenco di nomi di bytecode, per favore condividi me?

risposta

12

Le + tribune per il generico extends mentre il TE significa che c'è un tipo var E

Così nel codice sorgente che sarà del tipo:

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

Date un'occhiata alla sezione asm user guide 4.1.1 Generics -> Metadata

+0

Grande e grazie. Questo dovrebbe essere sufficiente, lo porterò avanti. :) –