В чем разница между "дескриптором" и "подписью"?
теперь я использую ASM (Java bytecode instrumentation library). Для получения подписи данного метода существует поле с именем "desc". Я предполагаю, что это аббревиатура "дескриптора", но почему она не называется"подпись"? Есть ли разница между" дескриптором "и"подписью"?
3 ответов
смотреть на!--1-->спецификация JVM раздел 4.3.3, во-первых, дескриптор содержит возвращаемый тип-тогда как это не является частью подпись метода.
дескриптор метода представляет параметры, что метод и значение, которое он возвращает
но...
два метода имеют одинаковую подпись, если они имеют одинаковое имя и типы аргументов
(учитывая это также не ясно, что в дескрипторе имя метода...)
в контексте asm вы заботитесь о внутренних именах, дескрипторах методов, дескрипторах типов и сигнатурах. Номера разделов из asm doc.
2.1.2 внутренние имена
"внутреннее имя класса-это просто полное имя этого класса, где точки заменяются слешами."
com/snark/Boojum
2.1.3 дескрипторы типа
[[Ljava/lang/Object;
2.1.4 метод дескриптор
дескриптор метода-это список дескрипторов типов, описывающих параметр типы и возвращаемый тип метода в одной строке.
int[] m(int i, String s) becomes (ILjava/lang/String;)[I
4.1. Дженерики (для подписей)
" по причинам обратной совместимости информация о универсальных типах не является хранится в дескрипторах типа или метода (которые были определены задолго до введения дженериков в Java 5), но в подобных конструкциях называется type, метод и классовые подписи."
Это Java:
List<List<String>[]>
становится такой подписью:
Ljava/util/List<[Ljava/util/List<Ljava/lang/String;>;>;
"дескриптор", вероятно, относится к дескриптору метода, как определено в спецификация JVM § 4.3.3. Он описывает параметр типы и возвращаемый тип метода. Это не содержит имя метода.
"signatur", вероятно, относится к подписи, как определено в Спецификация Языка Java § 8.4.2. Он содержит имя метода, а также типы параметров. Это не содержит возвращаемый тип.
обратите внимание, что эти два условия определены в двух разных местах и на разных уровнях. Дескриптор метода существует на уровне JVM, поэтому он довольно отделен от Java язык. Подпись, однако, очень похожа на концепцию, но действует на Java язык уровень (как он определен в JLS).