2011-12-01 16 views
13

この例外が発生しましたが、解決しました。NoSuchMethod例外のメソッドシグネチャの理解

java.lang.NoSuchMethodError: antlr.NoViableAltForCharException.<init> 
(CLjava/lang/String;II)V 

しかし、私は、メッセージのこれらの種類どのように解釈するかを知りたい:「(CLjava/LANG /文字列; II)V」 また、この「initは」NoViableAltForCharExceptionクラスのコンストラクタを言及しません?

ありがとうございました。

答えて

26

タイプシグニチャ - から取られましたthis page

JNIは、署名型のJava VMの表現を使用します。表3-2に、これらのタイプシグネチャを示します。例えば

Z        boolean 
B        byte 
C        char 
S        short 
I        int 
J        long 
F        float 
D        double 
L fully-qualified-class ;  fully-qualified-class 
[ type       type[] 
(arg-types) ret-type   method type 

、Javaメソッド:

long f (int n, String s, int[] arr); 

は、次のタイプのシグネチャがあります。

(ILjava/lang/String;[I)J 
7

コンストラクタを探していますが、antlr.NoViableAltForCharException(char, String, int, int)ですが、クラス内でそれを見つけることができません。

<init>メソッドがコンストラクタであり、<cinit>メソッドが静的初期化ブロックです。パラメータタイプは、@ gkamalによってリストされ、さらにVが無効です。概念上のコンストラクタは、を返します。これが、署名の最後にVの理由です。

ところで:Jが長いためであり、それはJavaクラスのロングとJためLされている可能性がときLは、クラスのためのものであることをおそらく皮肉です。 ;)

+1

私はポスターが実際の解釈ではなく、それをどのように解釈するのかを考えていると思います。 – gnomed

+0

Peterさん、お返事ありがとうございます。答えは、メソッドシグネチャとinitメソッドの両方で役に立ちました。 – popcoder

2

types docsを参照してください。それは便利な略記法です。

0

あなたがしているものを対サーバー上の期限切れの.jarファイルを持つことができますあなたのコードをコンパイルする。 サーバー上のすべての.jarファイルが、コンパイルしているものと同じであることを再度確認します。