Hallo,
ich habe eine Log-Klasse, die eine statische ArrayList<LogEintrag> enthält und öffentliche Methoden
für alle Klassen anbietet, damit sie Log-Einträge erstellen können.
So weit so gut, ich kann also aus jeder Klasse und Methode heraus einfach den statischen Log aufrufen:
Jetzt wollte ich zur besseren Darstellung nicht eine Funktion anbieten, die alle Einträge auf der Console ausdruckt,
zB per "Log.printAll()", sondern ich will mir eine Konsole dafür machen.
Die Konsole ist nur ein JFrame dass eben alle Einträge des Logs in dem Fenster anzeigt.
Zudem sollte die Konsole die Einträge in Real-time updaten.
Jetzt ist mir das mit Observern eingefallen.
Alles in allem hab ich folgendes Design-Problem:
Anscheinend kann man keinen Observer über einer statischen Klasse machen, d.h. das hier geht NICHT:
Allerdings soll der Log von allen Klassen im Programm jeder Zeit aufrufbar sein, es soll zu Debugging Zwecken dienen und wann immer irgendeine Methode in irgendeiner Klasse etwas macht, soll sie es loggen.
Jetzt müsste ich also eine Instanz von "Log" machen, und die allen Klassen übergeben, was wie ich finde nicht gerade toller Stil ist, denn die Klassen selber haben eig. mit Log nix am Hut, deshalb wollte ich es ja statisch machen, so als globale Klasse die quasi "neben" dem Programm zur Verfügung steht..
Geht das nicht irgendwie besser, als jeder gottverdammten Klasse im Programm diesen Log zu übergeben? Wenn ich denke wie die Hierarchie ist mit Unterklassen etc wird das ja n riesen Choas, da zieht sich der Log durch die Konstruktoren und hat eig. mit den ganzen Klassen mal gar nichts am Hut..
Hab keine Ahnung :bahnhof:
ich habe eine Log-Klasse, die eine statische ArrayList<LogEintrag> enthält und öffentliche Methoden
für alle Klassen anbietet, damit sie Log-Einträge erstellen können.
So weit so gut, ich kann also aus jeder Klasse und Methode heraus einfach den statischen Log aufrufen:
Code:
Log.add("Meine Nachricht");
Jetzt wollte ich zur besseren Darstellung nicht eine Funktion anbieten, die alle Einträge auf der Console ausdruckt,
zB per "Log.printAll()", sondern ich will mir eine Konsole dafür machen.
Die Konsole ist nur ein JFrame dass eben alle Einträge des Logs in dem Fenster anzeigt.
Zudem sollte die Konsole die Einträge in Real-time updaten.
Jetzt ist mir das mit Observern eingefallen.
Alles in allem hab ich folgendes Design-Problem:
Anscheinend kann man keinen Observer über einer statischen Klasse machen, d.h. das hier geht NICHT:
Code:
public class Log extends Observable {
private static ArrayList<LogEntry> log = new ArrayList<LogEntry>();
public static void add(String message) {
log.add(new LogEntry(message));
setChanged(); // <- Fehler: non-static method auf static context angewandt!
notifyObservers(); // <- Fehler: non-static method auf static context angewandt!
}
public static String get(int index) {
return log.get(index).getLogEntry();
}
}
Allerdings soll der Log von allen Klassen im Programm jeder Zeit aufrufbar sein, es soll zu Debugging Zwecken dienen und wann immer irgendeine Methode in irgendeiner Klasse etwas macht, soll sie es loggen.
Jetzt müsste ich also eine Instanz von "Log" machen, und die allen Klassen übergeben, was wie ich finde nicht gerade toller Stil ist, denn die Klassen selber haben eig. mit Log nix am Hut, deshalb wollte ich es ja statisch machen, so als globale Klasse die quasi "neben" dem Programm zur Verfügung steht..
Geht das nicht irgendwie besser, als jeder gottverdammten Klasse im Programm diesen Log zu übergeben? Wenn ich denke wie die Hierarchie ist mit Unterklassen etc wird das ja n riesen Choas, da zieht sich der Log durch die Konstruktoren und hat eig. mit den ganzen Klassen mal gar nichts am Hut..
Hab keine Ahnung :bahnhof: