11

必要な出力例:

(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
(Ljava/lang/String;)Lorg/w3c/dom/Attr;

このような署名は、javapユーティリティを使用して生成できます。

javap -s -p org.w3c.dom.Node

しかし、それらをプログラムで生成する方法はありますか。jni仕様のすべてのルールを手動でコーディングしたくありません。

4

4 に答える 4

4

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 ステートメントまたはマップを介してプリミティブ クラスを取得します。

于 2012-03-04T00:37:45.033 に答える
0

私はかつて、メソッド署名の生成についてこの長いバックを作成しようとしていました.スタイルに従ってこれを行ったことを覚えていますが、静かな長い時間かどうかはわかりません.

1) メソッド シグネチャを生成する独自のクラスを作成しました。2) リフレクション クラスを使用して、メソッド Names を動的に取得しました。

問題の完全な解決策ではないにしても、これがアイデアを得るのに役立つことを願っています

于 2010-12-16T03:15:02.580 に答える
0

Objectweb のユーザー ASM ライブラリ。速いだけでなく、クラスを横断することを選択できます

于 2010-12-16T05:14:52.073 に答える