Start / Cheat Sheets

Cheat Sheet

Modern Java mit Coding Agents — Cheat Sheet

Stand: · Modern Java Development

JavaCoding AgentsMigrationGitHub Copilot

Der Spickzettel zum Seminar Modern Java Development — für den Moment, in dem eine Migration ansteht, ein Agentenvorschlag auf dem Bildschirm liegt oder die Frage im Raum steht, was eigentlich in die Projektanweisung gehört. Zum Erlernen des Vorgehens taugt er nicht; dafür ist das Seminar da. Maßgeblich für Versionen und Support-Fenster bleibt die Dokumentation von Oracle beziehungsweise OpenJDK, für die Werkzeuge die des jeweiligen Anbieters. Jeder Abschnitt verweist auf das Modul, aus dem er stammt.

Java-Stände und Migrationsziel

VersionTypRolle
Java 8Alt-LTSWeit verbreitet, ohne modernes Sprachniveau
Java 11Alt-LTSErster Schritt nach 8, oft Zwischenstation
Java 17LTSRecords und Sealed Types verfügbar
Java 21LTSVirtual Threads, kostenfreie Updates enden 09/2026
Java 25LTSAktuelles Ziel für neue und migrierte Projekte
Java 26FeatureAktueller Stand, sechs Monate Lebensdauer

Feature-Releases sind kein Migrationsziel für Bestandsprojekte — LTS ist es.

Modul: Modernes Java verstehen

Lohnt sich diese Modernisierung?

Die Fragen stehen in absteigender Stärke. Sie gelten unverändert auch für Vorschläge, die ein Agent macht.

FrageBedeutung
Verhindert es einen Fehler?Stärkstes Argument, meist sofort umsetzen
Macht es Absicht sichtbar?Gutes Argument, wenn Lesbarkeit gewinnt
Entfernt es eine Fehlerquelle?Gutes Argument, oft mit Testgewinn
Ist es nur kürzer?Schwaches Argument, im Bestand nicht ausreichend
Berührt es viele Aufrufstellen?Gegenargument, Aufwand gegen Nutzen wägen

Modul: Modernes Java verstehen

Der Java-8-Bias von Sprachmodellen

Ein Großteil des öffentlich verfügbaren Java-Codes stammt aus der Java-8-Zeit. Entsprechend fallen die Vorschläge aus — lauffähig, aber von gestern.

Vorschlag des ModellsHeute üblich
Anonyme innere KlasseLambda oder Methodenreferenz
new ArrayList<>() und addList.of(...)
if-else-Kette auf TypprüfungPattern Matching in switch
Datenklasse mit GetternRecord
Klassisches switch mit breakSwitch als Ausdruck
synchronized plus Thread-PoolVirtual Threads, wo passend
StarkSchwach
Verbreitete Framework-MusterHauseigene Bibliotheken
Standardbibliothek, ältere TeileZuletzt hinzugekommene APIs
Testgerüste und BeispieldatenFachliche Sonderregeln
Erklären vorhandenen CodesArchitekturentscheidungen

Modul: Sprachmodelle und Java-Code

Kontext auswählen

Trägt AussageFüllt nur
Die Klasse, die geändert wirdDas ganze Paket vorsichtshalber
Ihr TestAlle Tests des Moduls
Die fachliche SchnittstelleGenerierte Klassen
Ein Beispiel-DatensatzVollständige Testdaten
Die ProjektanweisungHistorische Dokumentation

Modul: Sprachmodelle und Java-Code

Agentenkontext im Repository

Was ein Agent über ein Maven-Projekt wissen muss, steht überwiegend nicht im Code — und wird deshalb geraten, wenn es nirgends aufgeschrieben ist.

Frage des AgentenSteht im Code?
Wie baue ich nur dieses Modul?Nein
Welcher Test gehört zu dieser Klasse?Teilweise
Darf die API auf den Kern zugreifen?Nein
Welche Java-Version gilt hier?In der pom.xml, verstreut
Ist dieses Verzeichnis generiert?Nein
Welche Konvention gilt für Fehler?Nein

Kanonische Kurzform der drei wirksamsten Abschnitte:

## Bauen und Testen
Vor Abschluss immer:  mvn -q -pl <modul> -am test
Vollständig nur auf ausdrückliche Bitte:  mvn -q verify

## Modulgrenzen
kern kennt keine anderen Module.
Neue Abhängigkeit zwischen Modulen: vorher fragen.

## Nicht lesen
target/, generated-sources/, *.class

## Lombok
Getter, Setter und Builder entstehen erst beim Übersetzen
und stehen nicht im Quelltext.

Ohne -am scheitert der Modultest an fehlenden Abhängigkeiten. Ohne den Lombok-Absatz hält der Agent vorhandene Methoden für fehlend.

Modul: Agentenkontext für Java-Repositories

Regeln so formulieren, dass sie wirken

Wirkt kaumWirkt
Schreibe sauberen CodeNeue Datenklassen als Record
Achte auf TestabdeckungJede neue Fachmethode braucht einen Test
Vermeide AbhängigkeitenKeine neue Abhängigkeit ohne Rückfrage
Nutze modernes JavaZielstand Java 25; kein anonymes Inner-Class
Halte dich an die Architekturkern kennt keine anderen Module

Links steht, was man sich wünscht. Rechts, was überprüfbar ist.

Modul: Agentenkontext für Java-Repositories

Auftrag: direkt oder Analyse zuerst

Direkter AuftragAnalyse zuerst
Ergebnis ist CodeErgebnis ist eine Liste mit Begründung
Prüfaufwand am Ende, hochPrüfaufwand vorn, niedrig
Korrektur bedeutet NeuimplementierungKorrektur ist ein Satz
Umfang wird vom Agenten gewähltUmfang wird vom Menschen gewählt

Modul: Feature-Entwicklung mit dem Agenten

Migration schneiden

Ein Migrationsschritt ist erst dann einer, wenn er allein übersetzt, allein getestet und allein zurückgenommen werden kann.

Schlecht geschnittenGut geschnitten
Alle Module auf einmalEin Modul, Reihenfolge nach Abhängigkeit
Version und Refactoring gemischtErst Version, dann Aufräumen
Bibliotheken gebündelt hochziehenEine Bibliothek je Schritt
Ohne Zwischenstand lauffähigNach jedem Schritt lauffähig
BlockertypUmgang
Neue Version vorhandenEinzeln hochziehen, testen
Nachfolger unter neuem NamenWechsel als eigener Schritt
Aufgegeben, Ersatz vorhandenFachliche Bewertung nötig
Aufgegeben, kein ErsatzEigenlösung oder Modul zurückstellen
Hausintern, nicht gepflegtZuständigkeit klären, dann entscheiden

Modul: Migration mit Coding Agents

Absicherung vor der Migration

LageKonsequenz
Gute Testabdeckung im ModulMigration kann beginnen
Tests vorhanden, wenig aussagekräftigErst nachschärfen
Keine Tests, Fachlogik einfachCharakterisierungstests schreiben
Keine Tests, Fachlogik komplexZurückstellen, erst absichern
Verhalten nirgends dokumentiertFachbereich einbeziehen

Das Netz wird nicht flächendeckend gespannt, sondern an den Stellen, an denen sich zwischen zwei Ständen tatsächlich etwas ändern kann.

RisikostelleDer Test prüft
Ersetzte APIVerhalten bei Sonderfällen
Datum und ZeitzoneGrenzwerte über Zeitumstellung
ZeichensatzUmlaute und Sonderzeichen im Umlauf
ZahlenrundungHalbe Werte und Nachkommastellen
NebenläufigkeitErgebnis unter gleichzeitiger Last
SortierungReihenfolge bei gleichen Schlüsseln

Module: Migration mit Coding Agents · Tests und Debugging im Migrationskontext

Prüfinstanzen und Freigabegrenze

Jede Instanz prüft, was die vorherige nicht kann — nicht dasselbe noch einmal.

InstanzFängt ab
CompilerErfundene Namen, Typfehler
TestsVerhaltensänderungen
Statische AnalyseMuster, Stil, bekannte Fallen
MenschFachlichkeit, Architektur, Angemessenheit
ÄnderungFreigabe
Formatierung, Umbenennung lokalAgent allein
Test ergänzenAgent allein
Fachlogik ändernMensch prüft Diff
Neue AbhängigkeitMensch entscheidet vorher
Modulgrenze berührenMensch entscheidet vorher
Datenbankschema ändernMensch entscheidet vorher

Modul: Qualität, Sicherheit und Firmenumgebung

Lizenz- und Herkunftsfragen

FrageAntwortlage
Stammt der Code aus fremdem Projekt?Nicht feststellbar
Welche Lizenz gilt für das Ergebnis?Vertraglich geregelt, nicht technisch
Dürfen wir es ausliefern?Hausjuristische Frage
Ist die Nutzung dokumentiert?Organisatorisch lösbar
Kam eine fremde Bibliothek hinzu?Technisch prüfbar

Nur die letzte Zeile lässt sich im Build automatisieren. Der Rest ist Organisation — kein Werkzeugproblem.

Modul: Qualität, Sicherheit und Firmenumgebung

Verbrauch senken

TreiberGegenmittel
Ganze Ordner als ReferenzEinzelne Dateien benennen
Sehr lange SitzungenVerdichten oder neu beginnen
Wiederholte SuchläufePfade direkt angeben
Vollständige Reaktor-BuildsGezieltes Modul- und Testkommando
Große WerkzeugausgabenAusgabe filtern, bevor sie ankommt

Dieselben Maßnahmen verbessern auch die Antwortqualität — hier gibt es keinen Zielkonflikt.

Modul: GitHub Copilot im Java-Projekt

Typische Fallen

  • LTS heißt nicht „läuft ewig”. Auch LTS-Fenster enden; für Java 21 im September 2026.
  • Laufzeitstand ist nicht Sprachniveau. Die Anwendung läuft längst auf aktueller JVM, der Code bleibt Java 8, weil die Projektkonfiguration nie nachgezogen wurde.
  • Geänderte Standardwerte werfen keinen Fehler. Zeichensatz und Zeitzone ändern Verhalten still — der grüne Compiler sagt darüber nichts.
  • default hebelt die Vollständigkeitsprüfung aus. Bei Sealed Types und Pattern Matching bewusst darauf verzichten.
  • Attribute an bekannten Annotationen. Die Annotation gibt es, das Attribut nicht — der häufigste übersehene Fall.
  • Grün heißt nicht richtig. Der Compiler prüft Typen, nicht Fachlichkeit; ein Test kann grün sein und nichts behaupten.
  • Der Agent passt den Test an die Implementierung an. Ausdrücklich verlangen, Fehlschläge zu berichten statt zu umgehen.
  • Namensgleichheit ist nicht Verhaltensgleichheit. Bei ersetzten APIs der gefährlichste Fall.
  • Migrieren und Absichern gleichzeitig. Dann prüft der Test die neue Annahme und bestätigt nur die Änderung.
  • Transitive Abhängigkeiten legen den Stand fest. Sie stehen nicht in der Konfiguration, sondern im Abhängigkeitsbaum.

Module: alle zehn Module des Seminars

Zum Seminar Modern Java Development