studio settitle programacion móviles desarrollo curso aplicaciones java method-signature

settitle - Calcular la firma de una función Java



programacion android pdf 2018 (6)

¿Hay una manera de calcular la firma del método de una clase de Java? Una firma
like ([Ljava/lang/String;)V representa una función que toma un String[] como argumento
y devuelve void .

¿Cuál es la regla para calcular la firma?


De la JLS, §8.4.2 :

8.4.2 Firma del método

La firma de un método consiste en el nombre del método y el número y tipos de parámetros formales del método. Una clase no puede declarar dos métodos con la misma firma, o se produce un error en tiempo de compilación.

El ejemplo:

class Point implements Move { int x, y; abstract void move(int dx, int dy); void move(int dx, int dy) { x += dx; y += dy; } }

provoca un error en tiempo de compilación porque declara dos métodos de move con la misma firma. Esto es un error aunque una de las declaraciones sea abstract .

Así que la "regla" es

el nombre del método y el número y tipos de parámetros formales del método



Siempre es un conjunto de paréntesis que incluye significantes de tipo para los argumentos, uno después del otro sin comas ni nada, seguido de un significante de tipo para el valor de retorno después del período de cierre. Es bastante sencillo.

Hay una tabla de firmas de tipo en esta página:

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[]

Esos dos últimos significan que para nombrar una clase, usted dice, por ejemplo, Ljava/lang/Object; , y para nombrar una matriz de (por ejemplo) int , usted dice [I , y una matriz de matriz de int es [[I

Si quisiera literalmente calcular la firma en código Java basado en la reflexión, sería lo suficientemente simple; solo use la tabla anterior con reglas para manejar objetos y arreglos.


Simplemente ejecute javap -s <class-name> en la carpeta que contiene los archivos .class . Te lo dirá con 100% de precisión. No hay necesidad de adivinar estas cosas.


Una búsqueda rápida en Google descubrió esta página web:

http://www.rgagnon.com/javadetails/java-0286.html

Hay dos partes en la firma. La primera parte se incluye entre paréntesis y representa los argumentos del método. La segunda parte sigue el paréntesis de cierre y representa el tipo de retorno. El mapeo entre el tipo Java y el tipo C es

Type Chararacter boolean Z byte B char C double D float F int I long J object L short S void V array [