Подтвердить что ты не робот

Понимание сигнатуры метода в исключении NoSuchMethod

Я получил это исключение, но разрешил его.

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

Но я хотел бы знать, как интерпретировать такие сообщения: "(CLjava/lang/String; II) V"  Кроме того, этот "init" упоминает конструктор класса NoViableAltForCharException?

Спасибо.

4b9b3361

Ответ 1

Тип Подписи - взяты из этой страницы.

JNI использует представление виртуальных машин Java типов сигнатур типов. В таблице 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

Ответ 2

Он ищет конструктор antlr.NoViableAltForCharException(char, String, int, int), но не может найти его в классе.

Метод <init> - это конструктор, а метод <cinit> - это статический блок инициализации. Типы параметров перечислены @gkamal с добавлением, что V недействителен. Понятно, что конструкторы возвращают void, что является причиной для V в конце подписи.

BTW: Возможно, иронично, что J длинный, а L - для класса, когда он может быть L для long и J для класса Java.;)

Ответ 4

У вас может быть устаревший .jar файл на сервере, с которым вы компилируете свой код. Дважды проверьте, что все файлы .jar на сервере такие же, как и те, которые вы компилируете.