Есть ли способ вычислить подпись метода класса Java? Подпись
как ([Ljava/lang/String;)V
представляет собой функцию, которая принимает аргумент String[]
как аргумент
и возвращает void
.
Какое правило для вычисления подписи?
Есть ли способ вычислить подпись метода класса Java? Подпись
как ([Ljava/lang/String;)V
представляет собой функцию, которая принимает аргумент String[]
как аргумент
и возвращает void
.
Какое правило для вычисления подписи?
Он всегда представляет собой набор круглых скобок, ограничивающих знаменатели типов для аргументов, один за другим без запятых или чего-либо еще, за которым следует знак типа для возвращаемого значения после закрытия. Это довольно просто.
Там есть таблица титров на на этой странице:
Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
V void
L fully-qualified-class ; fully-qualified-class
[ type type[]
Эти последние два означают, что для обозначения класса вы, например, называете Ljava/lang/Object;
, а для имени массива (например) int
, вы говорите [I
, и массив из массива int
[[I
.
Если вы хотите буквально вычислить подпись в Java-коде на основе отражения, это будет достаточно просто; просто используйте приведенную выше таблицу с правилами обработки объектов и массивов.
Просто запустите javap -s <class-name>
в папке, содержащей файлы .class
. Он скажет вам 100% -ную точность. Не нужно угадывать эти вещи.
Быстрый поиск по Google обнаружил эту веб-страницу:
http://www.rgagnon.com/javadetails/java-0286.html
Подписи есть две части. Первая часть заключена в круглые скобки и представляет аргументы метода. Вторая часть следует за закрывающей скобкой и представляет тип возврата. Отображение между типом Java и типом C -
Type Chararacter boolean Z byte B char C double D float F int I long J object L short S void V array [
Подробнее см. здесь.
В основном это параметры, затем возвращаемые значения.
8.4.2 Подпись метода
Подпись метода состоит из имени метода и количество и типы формальных параметров для метода. Класс не может объявить два метода с одной и той же сигнатурой или ошибку времени компиляции имеет место.
Пример:
class Point implements Move { int x, y; abstract void move(int dx, int dy); void move(int dx, int dy) { x += dx; y += dy; } }
вызывает ошибку времени компиляции, поскольку объявляет два метода
move
с той же подписью. Это ошибка, хотя одна из объявленияabstract
.
Итак, "правило"
имя метода и количество и типы формальных параметров для метода
Вы можете найти эту информацию в Спецификация виртуальной машины Java