Obtenga el nombre del método actual que se está ejecutando en Java

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:

  1. 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
  2. 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   
      
  3. 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

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *