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

Почему "L" добавляется к моему пути Java?

У меня есть jar, загруженный в мой путь к классам (в iReport, если это имеет значение), что я уверен, имеет желаемый метод, но когда я пытаюсь проверить соединение, тем самым вызывая jar, я получаю java.lang.NoSuchMethodError, говоря он ссылается на класс

Lorg/springframework/web/context/WebApplicationContext

Я не уверен, связано ли это с проблемой или нет, но откуда взялся "L"? В другой раз, когда я ссылался на класс, после класса был "V". Откуда берутся эти письма и что они означают?

Начало трассировки стека:

java.lang.NoSuchMethodError:  
org.springframework.web.context.ContextLoader
.getCurrentWebApplicationContext()Lorg/springframework/web/context/WebApplicationContext;
4b9b3361

Ответ 1

Эти буквы используются Java для кодирования подписи метода внутри. Например, "L" объявляет следующий "объект", который определяется его полным именем класса и затем точкой с запятой. "V" следовало бы преследовать круглыми скобками и описывать возвращаемый тип "void".

Возьмем ваш пример:

java.lang.NoSuchMethodError:
org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext() Lorg/springframework/веб/контекст/WebApplicationContext;

В нем говорится, что в классе org.springframework.web.context.ContextLoader не указан метод getCurrentWebApplicationContext, который не принимает аргументы [обозначается ()] и возвращает объект (объявленный L), называемый `org/springframework/web/context/WebApplicationContext (закрыто ';').

EDIT: Список всех кодов приведен в таблице 3.2 спецификации JNI.

EDIT2: Еще более правдоподобно: раздел 4.3 Дескрипторы спецификации JVM содержат полную ссылку на формат и коды.

Ответ 2

Символ L используется для обозначения имени класса в спецификации внутреннего класса Java.

Подробнее см. спецификацию Java VM.

И таблица типов полей:

BaseType
B     byte (signed byte)
C     char (Unicode character)
D     double (double-precision floating-point value)
F     float (single-precision floating-point value)
I     int (integer)
J     long (long integer)
L<classname>;     reference (an instance of class <classname>)
S     short (signed short)
Z     boolean (true or false)
[     reference (one array dimension )