2011-12-01 12 views
13

我得到了這個異常但解決了它。瞭解NoSuchMethod異常中的方法簽名

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

,但我想知道如何解釋這些類型的消息:「(CLjava /朗/字符串; II)V」 此外,沒有這個「初始化」提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爲無效。理論上構造函數返回void,這是在簽名末尾V的原因。

BTW:這也許具有諷刺意味的是J長期和L是一流的,當它本來L長期和J的Java類。 ;)

+1

我相信海報正在尋找如何解釋它,而不是實際的解釋。 – gnomed

+0

感謝Peter,你的回答在方法簽名和init方法中都很有幫助。 – popcoder

2

查看types docs。這是一個方便的速記符號。

0

你可以在服務器上VS你在做什麼過時的.jar文件用你的代碼編譯。 仔細檢查服務器上的所有.jar文件是否與您正在編譯的文件相同。