6.3.2 | Aktivierung im Programm |
Aus dem Programm heraus können Zusicherungen auf drei Ebenen eingestellt werden:In Version 1.4 wurde die Klasse ClassLoader um Methoden erweitert, die diese Funktionalität bereitstellen:
- auf der Ebene eines ClassLoaders; diese Einstellung gilt dann für alle Pakete und Klassen, die dieser ClassLoader lädt.
- auf der Ebene eines Pakets,
- auf Klassenebene.
Das folgende Beispiel führt zunächst eine globale Aktivierung von Zusicherungen durch und macht dann Ausnahmen für zwei Klassen. Davon ist aber nur die erste effektiv, weil setClassAssertionStatus() im zweiten Fall aufgerufen wird, nachdem die betreffende Klasse durch die vorangehende Erzeugung eines Exemplars bereits geladen wurde.
- Mit setDefaultAssertionStatus(boolean) kann der globale Status für Zusicherungen gesetzt werden. Die Methode clearDefaultAssertionStatus() setzt den Status wieder auf false, d. h. keine Prüfungen, zurück.
- Mit setPackageAssertionStatus(String, boolean) kann der Status für alle Klassen eines Pakets (sowie aller Unterpakete) gesetzt werden, die ab dem Zeitpunkt des Aufrufs dieser Methode geladen werden. Es ist nicht möglich, den Status bereits geladener Klassen eines Pakets nachträglich zu ändern.
- setClassAssertionStatus(String, boolean) gestattet die Einstellung für eine Klasse. Auch bei dieser Methode ist zu beachten, dass die Einstellung nur dann wirksam wird, wenn die betreffende Klasse noch nicht geladen wurde.
ClassLoader classLoader; // Referenz auf System-Classloader ermitteln classLoader = ClassLoader.getSystemClassLoader(); // Assertion-Prüfungen beim System-ClassLoader einschalten classLoader.setDefaultAssertionStatus(true); // Eine Ausnahme für die Klasse AssertDemo machen classLoader.setClassAssertionStatus("AssertDemo", false); AssertDemo demo = new AssertDemo(); ... // Durch diese Anweisung wird AssertDemo2 bereits geladen. AssertDemo2 demo2 = new AssertDemo2(); // Daher kommt dieser Aufruf kommt zu spät. classLoader.setClassAssertionStatus("AssertDemo2", false);