Z jakiej metody została wywołana metoda?

0

Witam na załączonym kodzie jest wywoływana 2x metodaA i 2x metodaB obie wywołują metodeX czy można w metodzieX dowiedzieć się z jakiej metody została wywołana czy z metodyA czy z metodyB?

import javax.swing.JApplet;

public class Test85_SkadWywolany extends JApplet{
    @Override public void start(){
        System.out.println("start");
        MetodaA();
        MetodaB();
        MetodaB();
        MetodaA();
    }
    public void MetodaA(){
        MetodaX();
    }
    public void MetodaB(){
        MetodaX();
    }
    public void MetodaX(){        
        System.out.println("MetodaX");
    }
}

oczywiście zależy mi by nie dodawać żadnych dodatkowych parametrów przy wywoływaniu metodyX

0

Nie wiem czy to jest najprostsza metoda:

		Exception e = new Exception(); 
		e.getStackTrace();
0

Można... ale takie rzeczy robi się tylko przy debugowaniu (zazwyczaj gdy wystąpi błąd). Nie musisz i nie powinieneś robić tego ręcznie w żadnym innym celu.
Jak chcesz sobie wywalić wywołania funkcji na stosie, to robisz
Thread.dumpStack();
co jest równoznaczne z
new Exception("Stack trace").printStackTrace();

jeśli chcesz tylko element o jeden wyżej, możesz zrobić tak:
System.out.println(new Exception().getStackTrace()[1]);
Ale powinieneś wykorzystywać takie rzeczy tylko do debugowania...

0

dzieki! super! dziala jest jeszcze w tym fajna metoda getMethodName :)

Keraj ---> tak wiem to na okres testow bo doszukuje się błędów i idzie to pod górkę bo błędy rzadko kiedy występują i prześledzenie jest ciężkie w logach wszystkie metody skrzętnie wypisuje ale czasami z różnych metod to idzie

import javax.swing.JApplet;

public class Test85_SkadWywolany extends JApplet{
    @Override public void start(){
        System.out.println("start");
        MetodaA();
        MetodaB();
        MetodaB();
        MetodaA();
    }
    public void MetodaA(){
        MetodaX();
    }
    public void MetodaB(){
        MetodaX();
    }
    public void MetodaX(){   
        System.out.println(new Exception().getStackTrace()[1].getMethodName());
    }
}
0

Moim zdaniem dużo lepiej jest dostawać się do stack'a przez interfejs wątku:

Thread.currentThread().getStackTrace()
0
__krzysiek85 napisał(a)

Moim zdaniem dużo lepiej jest dostawać się do stack'a przez interfejs wątku:

Thread.currentThread().getStackTrace()

A w tej metodzie widzimy coś takiego:

if (this != Thread.currentThread()) {
  ...
}
else {
  return new Exception().getStackTrace();
}

Efekt? Metoda Thread.getStackTrace() widnieje w wyniku dumpowania stosu... :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1