Понимание сигнатуры метода в исключении NoSuchMethod - PullRequest
14 голосов
/ 01 декабря 2011

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

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

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

Спасибо.

Ответы [ 4 ]

26 голосов
/ 01 декабря 2011

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

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
7 голосов
/ 01 декабря 2011

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

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

Кстати: возможно, иронично, что J для длинных и L для классов, когдаэто могло быть L для длинных и J для Java-классов.;)

2 голосов
/ 01 декабря 2011

См. типы документов . Это удобное сокращенное обозначение.

0 голосов
/ 12 сентября 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...