Почему "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;
Ответы
Ответ 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 )