Понимание сигнатуры метода в исключении NoSuchMethod
Я получил это исключение, но разрешил его.
java.lang.NoSuchMethodError: antlr.NoViableAltForCharException.<init>
(CLjava/lang/String;II)V
Но я хотел бы знать, как интерпретировать такие сообщения: "(CLjava/lang/String; II) V"
Кроме того, этот "init" упоминает конструктор класса NoViableAltForCharException?
Спасибо.
Ответы
Ответ 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.;)
Ответ 3
См. типы документов. Это удобная сокращенная нотация.
Ответ 4
У вас может быть устаревший .jar файл на сервере, с которым вы компилируете свой код.
Дважды проверьте, что все файлы .jar на сервере такие же, как и те, которые вы компилируете.