必要な出力例:
(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
(Ljava/lang/String;)Lorg/w3c/dom/Attr;
このような署名は、javapユーティリティを使用して生成できます。
javap -s -p org.w3c.dom.Node
しかし、それらをプログラムで生成する方法はありますか。jni仕様のすべてのルールを手動でコーディングしたくありません。
必要な出力例:
(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
(Ljava/lang/String;)Lorg/w3c/dom/Attr;
このような署名は、javapユーティリティを使用して生成できます。
javap -s -p org.w3c.dom.Node
しかし、それらをプログラムで生成する方法はありますか。jni仕様のすべてのルールを手動でコーディングしたくありません。
http://asm.ow2.org/asm31/javadoc/user/org/objectweb/asm/Type.html#getMethodDescriptor%28java.lang.reflect.Method%29は、期待どおりの結果を提供します。
完全を期すためのオフトピックのメモ: 私の使用例では、その逆の変換も必要でした。これは、メソッド Type.getArgumentTypes(sig) および Type.getReturnType(sig) によって実現できます。タイプ Type の結果の配列要素は、メソッド getClassName() を提供します。このメソッドから、Class.forName を介して参照クラスを取得するか、単純な if ステートメントまたはマップを介してプリミティブ クラスを取得します。
私はかつて、メソッド署名の生成についてこの長いバックを作成しようとしていました.スタイルに従ってこれを行ったことを覚えていますが、静かな長い時間かどうかはわかりません.
1) メソッド シグネチャを生成する独自のクラスを作成しました。2) リフレクション クラスを使用して、メソッド Names を動的に取得しました。
問題の完全な解決策ではないにしても、これがアイデアを得るのに役立つことを願っています
Objectweb のユーザー ASM ライブラリ。速いだけでなく、クラスを横断することを選択できます