wieso implementierst du nicht deinen eigenen ansatz des observer patterns, welches eben die übergabe eines parameters an die update methode oder ähnliches ermöglicht...
IMHO geth es anders nicht, herauszufinden, von welcher methode aus die updateObservers() aufgerufen wurde. eventuell mittels einem umweg über den stacktrace.
warum?...hmm, weil ich mich noch nicht so gut auskenne...
wie macht man das? gibts dazu auch anleitungen? oder könnt ihr mir sagen wie ich dabei anfange?
IMHO geth es anders nicht, herauszufinden, von welcher methode aus die updateObservers() aufgerufen wurde. eventuell mittels einem umweg über den stacktrace.
Natürlich geht das. ???:L Die Observer#update(Observable, Object) hat als Parameter ein Observable. Das ist genau das Objekt, das den Observer benachrichtigt hat. Zusätzlich kann man beim beanachrichtigen auch noch ein weiteres beliebiges Objekt als Parameter übergeben.
Es ist also hier nicht nötig, eine eigene Implementierung zu schreiben.
PS: Im übrigen ist der Beispielcode ziemlich kontraproduktiv, denn das Problem des Threaderstellers wird da ignoriert.
Danke an alle!
Da bin ich erleichtert, dass es auch einfacher geht..
Das Objekt Observable, wie kann ich das auslesen? Ich habe es in einen String gecastet
und da stand dann drin Daten@10b344 ...sowas in der Art.
das mit dem casten von einem observer is so ne sache.
zuerst wäre es sinnvoll zu gucken ob dein Object das du aus dem Observer ziehst nen String is bevor du es castest.
geht ganz einfach mit:
Du weisst ja vorher, bei welchen Klassen der Observer angemeldet ist. Diese Information brauchst Du dann nur in der update() auswerten und kannst dann entsprechend reagieren:
Natürlich geht das. ???:L Die Observer#update(Observable, Object) hat als Parameter ein Observable. Das ist genau das Objekt, das den Observer benachrichtigt hat.
Ich kann so allerdings nur sehen, in welcher Klasse die notify Funktion aufgerufen wurde. Aber von welcher Funktion in der Klasse kann ich nicht sehen, oder?
dafür gibt es abgesehen von Logging wohl in keinem Java-Zusammenhang etwas vorgegebenes,
da musst du selber aktiv werden,
entweder bei jedem Aufruf die Operation als String mitübergeben in einer Exemplarvariable jeder deiner Klassen oder in neuimplementierten update-Operation,