2013-10-28 19 views
12

Ich arbeite an einem Bytecode-Analyseprojekt, für das ich ASM verwende. Alles läuft gut, ich kann parsen, Klassen- und Methodeninformationen erfolgreich abrufen.Bytecode-Analyse in Java

Aber ich bin im Verständnis Bytecode Darstellung für Generics stecken. Hier ist das ein Beispiel von java.util.list wenn ich visitMethod von ClassVisitor verwenden, um die Informationen zu drucken, ist es das, was ich für einen der Methode Unterschrift bin immer:

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

Hier versuche ich, einen nach dem anderen zu zerlegen und das Verständnis Argumente der Methode:

  • I steht für int
  • Ljava/util/Collection steht für es ist ein Argument vom Typ Collection

Aber ich bin bei Generika Typ stecken zB <+TE> etc. Kann mir jemand helfen? Ich habe versucht zu suchen, aber nicht genug Informationen. Wenn jemand eine Liste von Bytecode-Namen hat, können Sie mich bitte teilen?

Antwort

12

Die + steht für die generische extends während die TE bedeutet, dass es ein var E

So im Quellcode-Typ ist es aussehen wird:

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

Werfen Sie einen Blick auf die asm user guide Abschnitt 4.1.1 Generika -> Metadaten

+0

Großartig und danke. Das sollte genug sein, ich werde es weiterbringen. :) –