2009-10-02 2 views
12

私は自分のクラスパスにiReportがロードされていることを確認していますが(問題があれば)、接続をテストしようとしたときに希望のメソッドを持っているので、Jarを呼び出してjava.lang.NoSuchMethodErrorクラスにJavaパスに「L」が追加されるのはなぜですか?

Lorg/springframework/web/context/WebApplicationContext 

を参照している私は、この問題に関連するかしないかはわからないが、どこ先頭に「L」はから来たのか?私がクラスを参照していたもう一つの時間に、クラスの後に「V」がありました。これらの文字はどこから来ていて、何を意味していますか?スタックトレースの

スタート:

java.lang.NoSuchMethodError: 
org.springframework.web.context.ContextLoader 
.getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext; 

答えて

24

これらの文字は、内部メソッドのシグネチャをエンコードするためにJavaで使用されています。たとえば、「L」は、フルクラス名で指定され、セミコロンが後に続く、次の「オブジェクト」を発表します。 "V"は括弧でくくられていて、戻り値の型が "void"であるはずです。

あなたの例を見てみましょう:

java.lang.NoSuchMethodError:
org.springframework.web.context.ContextLoader .getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext;

それには、引数[()で表さ]を受け入れないと `ORG /と呼ばれる(Lによって発表された)オブジェクトを返すgetCurrentWebApplicationContextというクラスorg.springframework.web.context.ContextLoaderには方法がないことを言います、 springframework/web/context/WebApplicationContext( ';'で閉じます)。

編集:すべてのコードのリストはJNI specsの表3.2にあります。

EDIT2: JVM仕様のセクション4.3 Descriptorsには、フォーマットとコードの完全なリファレンスが含まれています。

+2

文字コードのための適切な参照はありますか?私は本質的に同じ答えを投稿するつもりでしたが、私は説得力のない発言をしたくありませんでした。 –

+0

ああ、それは良い参考資料です。 –

8

L文字は、Javaの内部クラス仕様でクラス名を示すのに使用されます。

詳細については、Java VM specを参照してください。

とフィールドタイプのtable

BaseType 
B  byte (signed byte) 
C  char (Unicode character) 
D  double (double-precision floating-point value) 
F  float (single-precision floating-point value) 
I  int (integer) 
J  long (long integer) 
L<classname>;  reference (an instance of class <classname>) 
S  short (signed short) 
Z  boolean (true or false) 
[  reference (one array dimension) 
+0

私も発見した: P - プロジェクト F - フォルダ – Seagull

関連する問題