¿Cómo obtener el nombre de un método como un String dentro del propio método?

publicado por: Anonymous

Explico con un ejemplo lo que intento conseguir.

Tengo el siguiente método y quiero obtener solo (sin información adicional) como se llama dentro del propio método.

Ejemplo con el String “foo” harcodeado.

public void foo(){
    System.out.println("foo");
}

Lo que necesito es obtener lo mismo pero haciendo uso de algún método interno de las librerías de java y que no incluya información adicional.

solución

Puedes obtener el nombre del método llamando a getMethodName() de la Clase StackTraceElement.

Puedes incluso obtener los nombres de métodos por orden descendente de llamada, como muestra en el ejemplo la llamada a getAllMethods(); dentro de foo():

Código:

VER DEMO EN REXTESTER

class Rextester
{  
    public static void main(String args[])
    {

        foo();
    }

    public static void foo ()
    {
        
        int intTotalMetodos = Rextester.class.getDeclaredMethods().length;
        String sMethodName = new String (Thread.currentThread().getStackTrace()[1].getMethodName());
        String sClassName  = new String (Thread.currentThread().getStackTrace()[1].getClassName());


        System.out.println("Esta clase se llama: "+sClassName+"n");
        System.out.println("Tiene: "+intTotalMetodos+" métodosn");

        System.out.println("Este método se llama: "+sMethodName+"n");
        
        /*
         * Se puede obtener el nombre de métodos 
         * por orden descendente de llamada
        */
        
        getAllMethods(intTotalMetodos);        
    }


    public static void getAllMethods(int intTotalMetodos) 
    {
      int i;

      System.out.println("------------------------------------------n");
      System.out.println("Nombres de métodos por orden descendente: n");

      for( i = 1; i <= intTotalMetodos; i++ ) {
         System.out.println("El método "+i+" se llama: "+Thread.currentThread().getStackTrace()[i].
         getMethodName());
      }
   }
}

Resultado:

Esta clase se llama: Rextester

Tiene: 3 métodos

Este método se llama: foo

------------------------------------------

Nombres de métodos por orden descendente: 

El método 1 se llama: getAllMethods
El método 2 se llama: foo
El método 3 se llama: main
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *