Elegant merken, wo man ist?

Status
Nicht offen für weitere Antworten.
S

Samuel

Gast
Ich kann das folgende mit einer zusätzlichen Var lösen, wollte aber mal wissen, ob es elegantere Methoden gibt, ich hab ein solches kleines Szenario
Code:
public class test{

 public test(){
  initPhase();
  while(true){
    methodeA();
  }

 }

 public void iniPhase(){
  methodeA();
 }
}

MethodeA wird einmal in der initPhase gestartet und oft in einer while schleife, nun würde ich gerne erfahren, wie die Methode sauber unterscheiden kann, ob sie in initPhase, oder nicht, drin ist.
Eine Varaible wäre sicherlich ne Möglichkeit, nur gibt es vielleicht ne andere Methode, die nicht gerade n riesen Workaround ist.
Ferner wird ja das methodeA in der initPhase nur einmal aufgerufen und in der Schleife sehr oft, da dacht ich mir, wenn MethodeA immer mit if(variable==true) oder ähnlichem arbeitet, welches nur einmal in der Init anders gesetzt wird, dann erzeug ich da doch nen( wenn auch geringen) Overhead, oder?

Natürlich würd ich auch gerne vermeiden, MethodeA zwei mal zu schreiben, weil diese schon umfangreich ist und durch doppelten Code kaum besser pflegbar :wink:

Danke
 

SebiB90

Top Contributor
ich würd der methode ein parameter übergeben boolean init
den beim 1. aufruf auf true setzen ansonsten auf false
und in der methode dann diese variable abfragen
wenn der code dieser methode aber so viel ist, denk mal darüber nach ob man codeteile in andere methoden auslagern könnte, ne 100 zeilen methode ist unschön ;)

edit:
es gibt zwar noch ne andere möglichkeit mit nem Stacktrace herauszufinden welche methode die methode aufgerufen hat, aber da müsstest du dann wohl auch immer überprüfen mit einer if abfrage, da kommste nicht daran herum, außer du machst 2 methoden und verlagerst gleich codeteile in andere methoden
 
S

Samuel

Gast
Ausgelgert ist es bereits und wie gesagt, nur wegen einer winzigen stelle die Signatur der Methode zu ändern find ich ein bisschen ungeschickt, aber mir fällt auch keine andere Möglichkeit
 

Kawa-Mike

Mitglied
Du möchtest innerhalb der MethodeA wissen, ob es der erste Aufruf ist, bzw. der wievielte Aufruf das ist ?
Dann wuerde ich mir eine Zaehlvariable definieren. Ist sie statisch, so zählt sie alle Aufrufe, sonst zählt sie nur die Aufrufe des aktuellen Objekts.

Code:
public class TestStaticCounter {
    public static void main(String[] args) {
	TestStaticCounter t = new TestStaticCounter();
	for(int i = 0; i < 5; i++){
                	t.methodeA();
	}
	
	TestStaticCounter t2 = new TestStaticCounter();
	System.out.println("Run 2");
	for(int i = 0; i < 3; i++){
	    t2.methodeA();
	}
    }
	
    private int zaehler = 0;
    private static int zaehleAlle = 0;

    public void methodeA(){
        System.out.println("Aufruf gesamt " + zaehleAlle ); 
        System.out.println("Aufruf dieses Objektes " + zaehler);
            zaehler++;
             zaehleAlle++;
    }
}

Falls dich nur interessiert ob die Methode überhaupt aufgerufen wurde, so reicht auch eine boolesche Variable.
 
S

Samuel

Gast
Ein zähler ist nicht nötig, weil es nur einmal passiert, suche nur halt eine Methode die vielleicht ne Art Referer ist und mir sagen kann, aha der Aufruf der Methode kommt aus Methode xy, aber da tuts wohl n boolean auch
 

tux2323

Mitglied
Code:
public class Test {

public Test(){
	init();
}

public void init(){
	initA();
	methodeA();
}
	
private void initA() {
	methodeA();
}

private void methodeA(){
	StackTraceElement[] trace = new Throwable().getStackTrace();
	System.out.println(trace[1]);
}

Ausgabe:
de.propix.properties.example.Test.initA(Test.java:20)
de.propix.properties.example.Test.init(Test.java:16)

THX 2 RW
 
S

Samuel

Gast
bitte?

Werd ich mir anschauen, danke soweit :)
Wobei mir gerade klar wird, das man so oder so dauernd Abfragen haben wird
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben