Java Videotraining Werbung

1. Geschachtelte.Typen

Alle bisherigen Typdeklaration standen in eigenen Dateien, sogenannten Compilationseinheiten. Java bietet allerdings mit geschachtelten Typen die Möglichkeit, in eine Typdeklaration eine andere Typdeklaration hinein zu setzen, um damit diese Typen noch enger aneinander zu binden. Die folgenden Übungen sollen deutlich machen, wofür sich geschachtelte Typen sehr gut eignen. Allerdings haben geschachtelte Typen einige Fallstricke, und deswegen sollen mehrere Quizfragen helfen, tieferes Verständnis für die geschachtelten Typen zu erlangen.

Voraussetzungen

  • Statische geschachtelte Typen kennen

  • Innere Typen (nicht-statische geschachtelte Typen) kennen

  • Lokale (innere) Typen kennen

  • Anonyme innere Klasse kennen

1.1. Geschachtelte Typen deklarieren

Geschachtelte Typen sind immer dann sinnvoll, wenn der innere Typ eine enge Bindung zum äußeren Typ hat, oder wenn ein Typdeklaration „geheim“ gehalten werden soll, dass sie für andere Typen oder sogar andere Methoden nicht sichtbar sein sollen. Die nächsten beiden Aufgaben zeigen Beispiele für genau diese beiden Gründe.

1.1.1. AM-FM-Modulation in den Radio-Typ setzen ⭐

In der Aufgabe "Radio eine AM-FM-Modulation geben" des vorausgehenden Kapitels haben wir den Aufzählungstyp Modulation deklariert, und zwar in einer eigenen Java-Datei. Die Deklaration sah so aus:

public enum Modulation { AM, FM }

Die Schallwellen mit den Tönen werden moduliert und es entstehen Radiowellen, die das Radio empfängt und wieder in Schallwellen übersetzt. Da ein Radio immer eine Modulation benötigt, lässt sich der Typ Modulation in den Typ Radio setzen und somit diese enge Bindung gut mit geschachtelten Typen abbilden. Damit lässt sich zum Beispiel die Modulation von Schallwellen eines Radios gut von der Modulation eines Videosignals trennen; so eine zweite Aufzählung ließe sich in einer Klasse TV unterbringen.

Aufgabe:

  • Setze den Aufzählungstyp Modulation in die Klasse Radio ein.

  • Wenn man auf einem Radio setModulation(…​) aufruft, wie werden AM/FM qualifiziert und übergeben?

Radio Modulation UML
Abbildung 1. UML-Diagramm mit geschachteltem Typ

1.1.2. Drei Arten von Watt-Comparator-Implementierungen schreiben ⭐

Im vorangehenden Kapitel haben wir in der Aufgabe „Verbrauch von Elektrogeräten vergleichen“ eine Implementierung der Schnittstelle Comparator vorgenommen. Zur Erinnerung:

Listing 1. com/tutego/exercise/device/bhdavq/ElectronicDeviceWattComparator.java
import java.util.Comparator;

public class ElectronicDeviceWattComparator implements Comparator<ElectronicDevice> {

  @Override
  public int compare( ElectronicDevice ea1,
                      ElectronicDevice ea2 ) {
    System.out.println( ea1 + " is compared with " + ea2 );
    return Double.compare( ea1.getWatt(), ea2.getWatt() );
  }
}

Die Implementierung der Schnittstelle ist in einer eigenen Compilationseinheit, also Datei, doch die Schnittstelle lässt sich auch lokaler mit Hilfe von geschachtelten Typen implementieren.

Aufgabe:

  • Schreibe den ElectronicDeviceWattComparator einmal als

    • statische geschachtelte Klasse,

    • lokale Klasse,

    • anonyme innere Klasse.