26

Javassist で実際のメソッドを持たないコンストラクタを作成しました

CtConstructor c = CtNewConstructor.make ( argTypes, null, newClass );

このクラスの署名を出そうとすると

c.getSignature();

私は得る

public Echo ()V

「V」の意味がわかりません。public Echo (); のいずれかを期待していました。または似たようなもの...

4

3 に答える 3

56

JVM はメソッド シグネチャを格納するコンパクトな方法を使用しますが、コンストラクタは特殊なケースと見なされます。

あなたの例:

  • ()引数を取らないメソッドを示します
  • V何も返さないことを示します

スキームの他の部分は次のとおりです。

  • B- バイト
  • C- 文字
  • D- ダブル
  • F- 浮く
  • I- 整数
  • J- 長いです
  • S- 短い
  • V- 空所
  • Z- ブール値
  • [- ブラケットに続くものの配列
  • L[クラス名] ;- ドットがスラッシュに変わるこのクラスのインスタンス
  • ([引数] )[戻り値の型] - メソッド シグネチャ

例えば:

public int foo(String bar, long[][] baz)

になるだろう

(Ljava/言語/文字列;[[J)I

Sun^H^H^HOracle の Web サイトで仕様を参照してください。

于 2012-03-28T14:14:15.330 に答える
7

「V」は結果タイプ「void」を決定します

于 2012-03-28T14:10:26.890 に答える
5

型シグネチャの V は void 型を意味します。バイトコードは、コンストラクターを他のメソッドと区別しません (特別なメソッド名を使用する場合を除く)。

于 2012-03-28T14:10:00.707 に答える