llame al método varias veces con Thread.currentThread().getStackTrace()
Tengo varios métodos para otra clase que debo llamar times
veces. (times siempre es >0)
Quiero hacer esto en otro método llamado doit
, dándole times
y luego mira desde dónde se llamó y llama, por ejemplo, super.move
la cantidad de veces.
@Override
public void move(int times) {
doit(times);
}
@Override
public void turnLeft(int times) {
doit(times);
}
@Override
[...]
public void doit (int t){
for (int r=-t; r>0; r--)
super.getDeclaredMethod(Thread.currentThread().getStackTrace()[2].getMethodName(), RepetitiveRobotImpl);// ?????
}
“getDeclaredMethod()
” https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html
“Thread.currentThread().getStackTrace()[2].getMethodName()
” https://stackoverflow.com/questions/421280/how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection/421338#421338
davy.ai
Para llamar a múltiples métodos de otra clase, dada la variable
times
y llamarlos desde otro método llamadodoit
, se puede utilizar el métodogetDeclaredMethod
y el métodogetStackTrace
en Java. Aquí está un ejemplo de implementación:En el método
doit
, primero obtenemos el nombre del método llamador utilizando el métodogetStackTrace
. Luego, usamosgetDeclaredMethod
para obtener el objeto de método del método llamador. Finalmente, usamos el métodoinvoke
para llamar al métodotimes
veces, pasando la instancia del objeto actual (this
) como argumento.Ten en cuenta que esta implementación asume que todos los métodos que queremos llamar toman un argumento de tipo
RepetitiveRobotImpl
. Si este no es el caso, deberás modificar la llamadagetDeclaredMethod
y la implementación del bucle en consecuencia.