Что означает "ILcom" или "Z"?
Это типы отображения для нативных типов. Вы можете найти обзор здесь .
Native Type | Java Language Type | Description | Type signature
---------------+--------------------+------------------+----------------
unsigned char | jboolean | unsigned 8 bits | Z
signed char | jbyte | signed 8 bits | B
unsigned short | jchar | unsigned 16 bits | C
short | jshort | signed 16 bits | S
long | jint | signed 32 bits | I
long long | jlong | signed 64 bits | J
__int64 | | |
float | jfloat | 32 bits | F
double | jdouble | 64 bits | D
Кроме того, подпись "L fully-qualified-class ;"
будет означать класс, однозначно указанный этим именем; например, подпись "Ljava/lang/String;"
относится к классу java.lang.String
. Кроме того, префикс [
к подписи делает массив этого типа; например, [I
означает тип массива int.
Что касается вашего следующего вопроса:
Почему в скобках есть четыре типа (ILcom / sun / javadoc / ClassDoc; Lcom / sun / javadoc / MemberDoc; Ljava / lang / String; Z) и один после скобок Ljava / lang / String; когда метод printDocLinkForMenu явно имеет пять параметров?
Потому что вы не запускаете код, который, по вашему мнению, выполняется. На самом деле работающий код пытается вызвать именно тот метод, который описан в сообщении об ошибке, с фактически пятью параметрами (I
должен учитываться отдельно) и типом возврата String
, но этот метод не ' t существует в пути к классам времени выполнения (в то время как он был доступен в пути к классам времени компиляции), следовательно, эта ошибка. Также см. NoSuchMethodError
javadoc :
Брошенный, если приложение пытается вызвать указанный метод класса (статический или экземпляр), и у этого класса больше нет определения этого метода.
Обычно эта ошибка отлавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось.
Итак, проверьте, действительно ли вы используете правильную версию кода, которую вы разместили в своем вопросе, и используете ли правильные зависимости в пути к классам времени выполнения и не имеете дублирующихся разных версий библиотек в пути к классам.
Обновление : исключение означает, что фактический код (неявно) пытается использовать метод следующим образом:
String s = printDocLinkForMenu(context, cd, (MemberDoc) emd, name, false);
Поскольку он ожидает String
результата, в то время как он объявлен void
.