2017-06-30 4 views
0

ASM methodnode.signatureがnullを返すのはなぜですか?なぜASM methodnode.signatureはnullを返しますか?

public static void main(String[] args) { 
    try { 
     FileInputStream fis = new FileInputStream("Test.class"); 
     ClassReader cr = new ClassReader(fis); 
     ClassNode cn = new ClassNode(); 
     cr.accept(cn, 0); 
     List<MethodNode> methods = cn.methods; 
     for (MethodNode methodNode : methods) { 
      System.out.println(methodNode.signature); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

「署名」は何を返すと思いますか? – jvwilge

+0

メソッドシグネチャ! –

+0

どこを使っていますか?このフィールドが常に利用可能かどうかはわかりません。 javadocはこう言っています: "メソッドのシグネチャ。nullの可能性があります。" 署名は決してnullではないので、少し混乱します。 'name + desc'は私が思うメソッドシグネチャに最も近いものです。 – jvwilge

答えて

1

署名は、この方法には、一般的な情報がないことを示すためにnullである: はここに私のコードです。このシグネチャはメタデータ以外のものであり、Javaランタイムでは無視され、むしろnullであってはならないメソッドの記述子を参照します。

+0

なぜ一般的な情報はありません??実際にはnullを返すローカル変数リストのような多くのフィールドがあります。 ASM APIには不思議な振る舞いがあります。適切なドキュメントをリンクしてくれれば助かります。 –

+0

これは、Javaクラスファイル内の表現に関連しています。一般的な署名は、Java 5以降に存在するメタデータに過ぎません。値がnullの場合、情報はクラスファイルにも格納されません。 ASMはクラス・ファイル表現にかなり近いので、この低レベルの類推です。 –

+0

@Aravind Ram:[ASMのドキュメント](http://asm.ow2.org/)または[JVMの仕様](https://docs.oracle.com/javase/)を見つけるのは難しいはずです。 specs/jvms/se8/html/index.html)。ここには何も不思議はありません。 – Holger

関連する問題