理解NoSuchMethod异常中的方法签名

时间:2011-12-01 15:12:20

标签: java exception constructor init nosuchmethoderror

我得到了这个例外但解决了它。

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

但我想知道如何解释这些消息:“(CLjava / lang / String; II)V”  此外,这个“init”是否提到了NoViableAltForCharException类的构造函数?

感谢。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

它正在寻找一个构造函数antlr.NoViableAltForCharException(char, String, int, int),但未能在类中找到它。

<init>方法是构造函数,<cinit>方法是静态初始化块。参数类型由@gkamal列出,V为空。 Notionally构造函数返回void,这是签名结束时V的原因。

顺便说一句:或许具有讽刺意味的是,J是长的,L是为了类,当它可能是L为长,J为Java类。 ;)

答案 2 :(得分:2)

请参阅types docs。这是一种方便的简写符号。

答案 3 :(得分:0)

您可能在服务器上有一个过时的.jar文件,而不是您编写代码的文件。 仔细检查服务器上的所有.jar文件是否与您正在编译的文件相同。