私は ASM (バイトコード変更ライブラリ) を使用しており、バイトコード命名形式の型名へのアクセスを提供します。たとえば、String フィールドには次の説明があると報告されています: Ljava/lang/String
一部のクラスでは Class.forName を呼び出す必要がありますが、そのための型名のソース コード形式が必要です (例: java.lang.String)。
内部名から Java ソース形式に変換する方法はありますか?
私は ASM (バイトコード変更ライブラリ) を使用しており、バイトコード命名形式の型名へのアクセスを提供します。たとえば、String フィールドには次の説明があると報告されています: Ljava/lang/String
一部のクラスでは Class.forName を呼び出す必要がありますが、そのための型名のソース コード形式が必要です (例: java.lang.String)。
内部名から Java ソース形式に変換する方法はありますか?
API メソッドはわかりませんが、変換は非常に簡単です。詳細については、 JVM 仕様のこちらを参照してください。プリミティブ型は 1 文字で表されます。
B = バイト
C = char
D = double
F = float
I = int
J = long
S = short
Z = boolean
クラスとインターフェイスの型は、接頭辞「L」と「;」を付けた完全修飾名で表されます。サフィックス。ドット「.」完全修飾クラス名の は「/」に置き換えられます (内部クラスの場合、外部クラス名と内部クラス名を区切る「.」は「$」に置き換えられます)。したがって、String クラスの内部名は「Ljava/lang/String;」になります。内部クラス「java.awt.geom.Arc2D.Float」の内部名は「Ljava/awt/geom/Arc2D$Float;」になります。
配列名は左角かっこ '[' で始まり、その後にコンポーネント タイプ名 (プリミティブまたは参照) が続きます。したがって、「int[]」は「[I」になり、「javax.swing.JFrame[][]」は「[[Ljavax.swing.JFrame;」になります。