Я вижу это в трассировке стека:
myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I), Lmyorg/pushemail/модель/EmailContent;
Что означает "(I)L
"?
Я вижу это в трассировке стека:
myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I), Lmyorg/pushemail/модель/EmailContent;
Что означает "(I)L
"?
Это означает, что метод принимает int
и возвращает myorg.pushemail.model.EmailContent
Строка от "L" до ";" является одним типом дескриптора для возвращаемого типа. Материал в круглых скобках - это параметры метода (в этом случае только один).
Эти дескрипторы типов определены как часть спецификации виртуальной машины Java, в разделе раздел 4.3.2. Таблица 4.3-A показывает все используемые коды. Когда класс компилируется, дескрипторы этой формы используются для указания сигнатуры методов и типов полей и переменных.
В сериализации Java дескрипторы методов являются частью информации, которая хешируется формирует по умолчанию serialVersionUID
для класса Serializable
.
В RMI дескрипторы методов хэшируются, и результат используется для идентифицировать, какой метод вызывается в удаленном интерфейсе.
Это форма name mangling, используемая для переадресации метода устранения неоднозначности. Имя метода добавляется рядом символов, описывающих параметры и возвращаемый тип: параметры появляются последовательно в круглых скобках, а тип возврата следует за закрывающей скобкой. Коды заключаются в следующем:
Z
: boolean
B
: byte
C
: char
S
: short
I
: int
J
: long
F
: float
D
: double
L
full-qual-class-name ;
: полный класс[
Тип: массив типаV
: void
Итак, в вашем случае (I)Lmyorg/pushemail/model/EmailContent;
означает, что метод принимает один аргумент типа int
и возвращает объект типа myorg.pushemail.model.EmailContent
.
Это второстепенный момент, но я не думаю, что это название. Название mangling подразумевает добавление дополнительного материала в имя. ZBC и т.д. - это только то, как java кодирует сигнатуры методов в файлах классов. Вместо написания логического значения они помещают Z. Это экономит место.
Согласно wikipedia (стандартное выражение об отказе от ответственности), единственное имя, используемое в java, включает внутренние классы и JNI.
В нем говорится, что в классе myorg.vignettemodules.customregistration.NewsCategoryVAPDAO
не указан метод getEmailContentByID
, который принимает int
аргументы [обозначается (I)] и возвращает объект (объявленный L), называемый myorg/pushemail/model/EmailContent
(закрытый '; ').
Символы L и я используются для обозначения имени класса и целого числа в спецификации внутреннего класса Java.