Что это значит в трассировке стека?

Я вижу это в трассировке стека:

myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID (I), Lmyorg / pushemail / модель / EmailContent;

Что означает " (I)L"?

10.12.2008 19:48:49
Искажение имени Java описано где-то на сайте Sun. Кто-то должен найти его и дать ссылку на него из принятого ответа.
Paul Tomblin 10.12.2008 20:01:09
Я только когда-либо видел, как это название искали в JNI; Я получил свою информацию от journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/…
Adam Rosenfield 10.12.2008 20:41:33
4 ОТВЕТА
РЕШЕНИЕ

Это означает, что метод принимает intи возвращаетmyorg.pushemail.model.EmailContent

Строка от "L" до ";" является дескриптором одного типа, для возвращаемого типа. В скобках указаны параметры метода (в данном случае это только один).

Эти дескрипторы типов определены как часть Спецификации виртуальной машины Java, в разделе 4.3.2 . Таблица 4.3-A показывает все используемые коды. Когда класс компилируется, дескрипторы этой формы используются для указания сигнатуры методов и типов полей и переменных.

В сериализации Java дескрипторы методов являются частью информации, которая хэшируется для формирования значенияserialVersionUID по умолчанию для Serializableкласса.

В RMI дескрипторы методов хешируются, а результат используется для определения того, какой метод вызывается в удаленном интерфейсе.

16
15.05.2015 19:55:22

Это форма искажения имени, используемая для устранения перегрузок методов. К имени метода добавляется ряд символов, описывающих параметры и тип возвращаемого значения: параметры отображаются последовательно в скобках, а тип возвращаемого значения следует за закрывающими скобками. Коды следующие:

  • Z: boolean
  • B: byte
  • C: char
  • S: short
  • I: int
  • J: long
  • F: float
  • D: double
  • Lполное имя класса ; : полное имя класса
  • [ тип : массив типа
  • V: void

Итак, в вашем случае, (I)Lmyorg/pushemail/model/EmailContent;означает, что метод принимает один аргумент типа intи возвращает объект типа myorg.pushemail.model.EmailContent.

20
10.12.2008 19:59:38

Это незначительный момент, но я не думаю, что это искажение имени. Искажение имени подразумевает добавление дополнительного имени к имени. ZBC и т. Д. - это как Java кодирует сигнатуры методов в файлах классов. Вместо того, чтобы писать логическое значение, они ставят Z. Это экономит место.

Согласно википедии (применяется стандартный отказ от ответственности), единственное искажение имени в java включает внутренние классы и JNI.

0
1.04.2010 10:11:09
Это должен быть комментарий к ответу AdamRosenfield, а не сам по себе ответ.
heenenee 27.01.2016 20:13:08

В нем говорится, что в классе нет метода с myorg.vignettemodules.customregistration.NewsCategoryVAPDAOименем, getEmailContentByIDкоторый принимает intаргументы [обозначается (I)] и возвращает объект (объявленный L) , который вызывается myorg/pushemail/model/EmailContent(закрывается с помощью ';').

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

0
13.01.2016 07:29:16