Errata und Updates zum Buch »Java — Der Grundkurs« (2. Auflage 2018)

Java 10

»Java — Der Grundkurs« (2. Auflage 2018) ist aktuell zu Java 9. Angesichts des nun halbjährlichen Release-Zyklus von Java (siehe Java-Versions-Wahnsinn) ist es unmöglich, den Grundkurs mit jedem Release zu aktualisieren.

Die gute Nachricht ist, dass Java 10, soweit es die Beispielprogramme aus meinem Buch betrifft, zu 100% kompatibel zu Java 9 ist. (Sollten Sie doch Probleme feststellen, senden Sie mir bitte eine kurze E-Mail.)

Die wichtigste Neuerung in Java 10 heisst Local-Variable Type Inference: Sie können die meisten Variablen nun mit var deklarieren. Der Compiler erkennt selbst den richtigen Typ. Einige Beispiele dafür finden Sie im Blog-Beitrag Java 10.

Bei den IntelliJ-IDEA-Beispielprojekten zum Buch ist Java 9 als JDK eingestellt. Wenn Sie auf Ihrem Rechner Java 10 oder eine neuere Version installiert haben, müssen Sie IntelliJ mitteilen, dass Sie diese Java-Version benutzen möchten. Dazu laden Sie zuerst das Projekt und führen dann File/Project Structure aus und stellen als Projekt SDK Java 10 ein. Wenn Java 10 nicht zur Auswahl steht, klicken Sie auf New und wählen den Installationspfad zur JDK aus.

Projekteinstellungen für Java 10
Seite 278, Upper Bounded Wildcards

In der Mitte des Listings sollte statt outputTriplet natürlich sumTriplet stehen, also:

Double result = sumTriplet(t2);
Seite 297, Listing Predicate-Schnittstelle

Im Listing am Beginn der Seite ist das Wort ‚More‘ enthalten, dass dort nichts verloren hat. Das Listing sieht korrekt so aus:

@FunctionalInterface
public interface Predicate<T> {
  boolean test(T t);
  ... sowie diverse Defaultmethoden
}
Seite 316, descendingIterator-Methode

Im Listing auf S. 309 unten wird die Methode decendingIterator gezeigt, um eine Schleife in umgekehrter Reihenfolge zu durchlaufen. Diese Methode steht allerdings nicht allgemein für Sets, sondern nur für TreeSets zur Verfügung. Sie kann daher nur nach einem Cast in diesen Typ angewendet werden. Das Listing sieht korrekt so aus:

// Schleife in umgekehrter Reihenfolge
TreeSet<Point> ts = (TreeSet) set;
for(Iterator<Point> pit = ts.descendingIterator();
    pit.hasNext(); ) {
  Point p = pit.next();
  System.out.println(p.x + " " +  p.y);
}
Seite 340, Listing unteres Drittel

Anstelle von Files.createDirectory(v23) muss es Files.createDirectories(v23) lauten, weil ein Verzeichnis und ein darin enthaltenes Unterverzeichnis erzeugt werden. (In den Beispieldateien ist der Code korrekt.)

Letzte Änderung am 22.3.2018. Vielen Dank an alle Leser und Leserinnen für das Feedback!