Obtener el nombre del método que se está ejecutando actualmente es útil para manejar excepciones y fines de depuración.
A continuación se muestran diferentes métodos para obtener el método de ejecución actual:
- Uso de seguimiento de pila arrojable :
- Uso de la clase Throwable: en Java, la clase Throwable es la superclase de todas las excepciones y errores en el paquete java.lang. La clase Java Throwable proporciona varios métodos como addSuppressed(), getMessage(), getStackTrace(), getSuppressed(), toString(), printStackTrace(),
etc. getStackTrace() en una instancia Throwable. En el elemento de índice 0 de la array representa la parte superior de la pila, que es la última llamada de método en la secuencia.// Java program to demonstrate
// Getting name of current method
// using Throwable Class
public
class
GFG {
public
static
void
foo()
{
// getStackTrace() method return
// current method name at 0th index
String nameofCurrMethod =
new
Throwable()
.getStackTrace()[
0
]
.getMethodName();
System.out.println(
"Name of current method: "
+ nameofCurrMethod);
}
public
static
void
main(String[] args)
{
// call function
foo();
}
}
Producción:
Name of current method: foo
- Uso de la clase de excepción
También podemos usar la clase de excepción que amplía la clase Throwable.// Java program to demonstrate
// Getting name of current method
// using Throwable Class
public
class
GFG {
public
static
void
foo()
{
// getStackTrace() method return current
// method name at 0th index
String nameofCurrMethod =
new
Exception()
.getStackTrace()[
0
]
.getMethodName();
System.out.println(
"Name of current method: "
+ nameofCurrMethod);
}
public
static
void
main(String[] args)
{
// call function
foo();
}
}
Producción:
Name of current method: foo
- Uso de la clase Throwable: en Java, la clase Throwable es la superclase de todas las excepciones y errores en el paquete java.lang. La clase Java Throwable proporciona varios métodos como addSuppressed(), getMessage(), getStackTrace(), getSuppressed(), toString(), printStackTrace(),
- Usando el método getEnclosingMethod()
- Por clase de objeto: podemos usar Class.getEnclosingMethod(), este método devuelve un objeto de método que representa el método envolvente instantáneo de la clase principal. Pero esto viene con una sobrecarga expresiva, ya que implica la creación de una nueva clase interna anónima detrás de escena.
// Java program to demonstrate
// Getting name of current method
// using Object Class
public
class
GFG {
// create a static method foo
public
static
void
foo()
{
// this method return a Method object representing
// the instantly enclosing method of the method class
String nameofCurrMethod =
new
Object() {}
.getClass()
.getEnclosingMethod()
.getName();
System.out.println(
"Name of current method: "
+ nameofCurrMethod);
}
public
static
void
main(String[] args)
{
// call function
foo();
}
}
Producción:
Name of current method: foo
- Por clase interna : también podemos definir una clase interna dentro de un método para obtener la referencia de clase.
// Java program to demonstrate
// Getting name of current method
// using Inner Class
public
class
GFG {
// create a static method foo
public
static
void
foo()
{
// Local inner class
class
Inner {
};
// this method return a Method object representing
// the instantly enclosing method of the method class
String nameofCurrMethod = Inner.
class
.getEnclosingMethod()
.getName();
System.out.println(
"Name of current method: "
+ nameofCurrMethod);
}
public
static
void
main(String[] args)
{
// call function
foo();
}
}
Producción:
Name of current method: foo //This java program on our machine because inner class // have some restriction for security purpose
- Por clase de objeto: podemos usar Class.getEnclosingMethod(), este método devuelve un objeto de método que representa el método envolvente instantáneo de la clase principal. Pero esto viene con una sobrecarga expresiva, ya que implica la creación de una nueva clase interna anónima detrás de escena.
- Uso de Thread Stack Trace : el método Thread.getStackTrace() devuelve una array de elementos de seguimiento de pila. El segundo elemento de la array devuelta del seguimiento de la pila contiene el nombre del método del subproceso actual.
// Java program to demonstrate
// Getting name of current method
// using Thread.getStackTrace()
public
class
GFG {
// create a static method foo
public
static
void
foo()
{
// Thread.currentThread() return current method name
// at 1st index in Stack Trace
String nameofCurrMethod = Thread.currentThread()
.getStackTrace()[
1
]
.getMethodName();
System.out.println(
"Name of current method: "
+ nameofCurrMethod);
}
public
static
void
main(String[] args)
{
// call function
foo();
}
}
Producción:
Name of current method: foo