viernes, 7 de enero de 2011

Conocer el método desde el que una función es llamada en Java

El lenguaje de programación Java en sus últimas versiones tiene algunas construcciones que permiten introspección.

Como ejemplo en el siguiente trozo de código la función 'print' tiene un comportamiento u otro dependiendo de que método le llama. En general esto no es una buena práctica de programación pero sirve como ejemplo ilustrativo.

public class Ejemplo{
public static void print(){
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
StackTraceElement e;
String str = stackTraceElements[2].getMethodName();

if(str.equals("other")){
System.out.println("Other message!");
}
else{
System.out.println("Hello world!");
}
}

public static void other(){
print();
}

public static void main(String[] args){
print();
other();
}
}

La llamada 'Thread.currentThread().getStackTrace()' devuelve un array de elementos 'StackTraceElement', cada uno de estos elementos representa una llamada de la pila de llamadas a funciones.

En el ejemplo anterior se consulta el nombre del método, pero se pueden extraer más datos, más información en el javadoc de StackTraceElement.

0 comentarios: