Skip to content

Commit 58315c7

Browse files
CopilotCopilot
andcommitted
Add German (de) translations for errors, io, and language categories
Create 39 German YAML translation files covering: - errors: helpful-npe, multi-catch, null-in-switch, optional-chaining, optional-orelsethrow, record-based-errors, require-nonnull-else - io: deserialization-filters, file-memory-mapping, files-mismatch, http-client, inputstream-transferto, io-class-console-io, path-of, reading-files, try-with-resources-effectively-final, writing-files - language: compact-canonical-constructor, compact-source-files, default-interface-methods, diamond-operator, exhaustive-switch, flexible-constructor-bodies, guarded-patterns, markdown-javadoc-comments, module-import-declarations, pattern-matching-instanceof, pattern-matching-switch, primitive-types-in-patterns, private-interface-methods, record-patterns, records-for-data-classes, sealed-classes, static-members-in-inner-classes, static-methods-in-interfaces, switch-expressions, text-blocks-for-multiline-strings, type-inference-with-var, unnamed-variables Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8b66cbb commit 58315c7

39 files changed

+663
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Hilfreiche NullPointerExceptions"
2+
oldApproach: "Kryptische NPE"
3+
modernApproach: "Detaillierte NPE"
4+
summary: "Die JVM teilt automatisch mit, welche Variable null war."
5+
explanation: "Hilfreiche NPEs beschreiben, welcher Ausdruck null war und welche Operation fehlgeschlagen ist. Dies ist seit Java 14 standardmäßig aktiviert – keine Codeänderung erforderlich, nur das JDK aktualisieren."
6+
whyModernWins:
7+
- icon: "🔍"
8+
title: "Exakte Variable"
9+
desc: "Die Meldung nennt die null-Variable in der Aufrufkette."
10+
- icon: ""
11+
title: "Schnelleres Debuggen"
12+
desc: "Kein Rätselraten mehr, welcher der fünf verketteten Aufrufe null war."
13+
- icon: "🆓"
14+
title: "Kostenloses Upgrade"
15+
desc: "Keine Codeänderungen – einfach auf JDK 14+ ausführen."
16+
support:
17+
description: "Seit JDK 14 allgemein verfügbar (März 2020)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Multi-Catch-Ausnahmebehandlung"
2+
oldApproach: "Separate Catch-Blöcke"
3+
modernApproach: "Multi-Catch"
4+
summary: "Mehrere Ausnahmetypen in einem einzigen catch-Block abfangen."
5+
explanation: "Multi-Catch behandelt mehrere Ausnahmetypen mit demselben Code. Die Ausnahmevariable ist effektiv final, sodass sie ohne Einwickeln weitergeworfen werden kann."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "DRY"
9+
desc: "Dieselbe Behandlungslogik wird einmal statt dreimal geschrieben."
10+
- icon: "🔄"
11+
title: "Wiederauswerfbar"
12+
desc: "Die abgefangene Ausnahme kann mit ihrem genauen Typ weitergeworfen werden."
13+
- icon: "📖"
14+
title: "Übersichtlich"
15+
desc: "Alle behandelten Typen sind an einer Stelle sichtbar."
16+
support:
17+
description: "Seit JDK 7 allgemein verfügbar (Juli 2011)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "null-Fall im switch"
2+
oldApproach: "Prüfung vor dem Switch"
3+
modernApproach: "case null"
4+
summary: "null direkt als switch-Fall behandeln – keine separate Absicherung nötig."
5+
explanation: "Pattern-Matching-Switch kann null als case-Label abgleichen. Dadurch entfällt die Null-Prüfung vor dem switch, und die Null-Behandlung wird explizit und sichtbar."
6+
whyModernWins:
7+
- icon: "🎯"
8+
title: "Explizit"
9+
desc: "Die null-Behandlung ist direkt im switch sichtbar."
10+
- icon: "🛡️"
11+
title: "Kein NPE"
12+
desc: "Ein Switch auf einen null-Wert wirft keine NullPointerException."
13+
- icon: "📐"
14+
title: "Alles in einem"
15+
desc: "Alle Fälle einschließlich null in einem einzigen Switch-Ausdruck."
16+
support:
17+
description: "Seit JDK 21 LTS allgemein verfügbar (Sept. 2023)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Optional-Verkettung"
2+
oldApproach: "Verschachtelte Null-Prüfungen"
3+
modernApproach: "Optional-Pipeline"
4+
summary: "Verschachtelte Null-Prüfungen durch eine Optional-Pipeline ersetzen."
5+
explanation: "Optional.map() verkettet nullable-Werte und bricht bei dem ersten null kurz. orElse() liefert den Standardwert. Dies beseitigt die Pyramide der verschachtelten Null-Prüfungen."
6+
whyModernWins:
7+
- icon: "🔗"
8+
title: "Verkettbar"
9+
desc: "Jeder .map()-Schritt behandelt null transparent."
10+
- icon: "📖"
11+
title: "Linearer Fluss"
12+
desc: "Von links nach rechts lesen statt verschachtelter if-Blöcke."
13+
- icon: "🛡️"
14+
title: "NPE-sicher"
15+
desc: "null wird bei jedem Schritt behandelt – kein Absturz möglich."
16+
support:
17+
description: "Verfügbar seit JDK 8+ (verbessert in 9+)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Optional.orElseThrow() ohne Supplier"
2+
oldApproach: "get() oder orElseThrow(supplier)"
3+
modernApproach: "orElseThrow()"
4+
summary: "Optional.orElseThrow() als klarere, absichtsverrätende Alternative zu get() verwenden."
5+
explanation: "Optional.get() gilt weithin als Code-Smell, weil es die Möglichkeit des Scheiterns verbirgt. Das argumentlose orElseThrow(), das in Java 10 hinzugefügt wurde, tut genau dasselbe, macht die Absicht aber explizit: Der Entwickler erwartet einen Wert und möchte eine Ausnahme, wenn keiner vorhanden ist."
6+
whyModernWins:
7+
- icon: "📖"
8+
title: "Selbst-dokumentierend"
9+
desc: "orElseThrow() signalisiert klar, dass ein leeres Ergebnis nicht erwartet wird."
10+
- icon: "🔒"
11+
title: "Kein get()"
12+
desc: "Statische Analysetools markieren get() als riskant; orElseThrow() ist idiomatisch."
13+
- icon: ""
14+
title: "Weniger Boilerplate"
15+
desc: "Kein Supplier für die standardmäßige NoSuchElementException erforderlich."
16+
support:
17+
description: "Verfügbar seit JDK 10 (März 2018)."
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Record-basierte Fehlerantworten"
2+
oldApproach: "Map oder ausführliche Klasse"
3+
modernApproach: "Fehler-Records"
4+
summary: "Records für prägnante, unveränderliche Fehlerantworttypen verwenden."
5+
explanation: "Records eignen sich hervorragend für Fehlerantworten – sie sind unveränderlich, besitzen eingebaute equals/hashCode für Vergleiche und toString für das Logging. Benutzerdefinierte Konstruktoren ermöglichen Validierung oder Standardwerte."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "Prägnant"
9+
desc: "Fehlertypen in 3 Zeilen statt 30 definieren."
10+
- icon: "🔒"
11+
title: "Unveränderlich"
12+
desc: "Fehlerdaten können nach der Erstellung nicht versehentlich geändert werden."
13+
- icon: "📋"
14+
title: "Automatisches toString"
15+
desc: "Perfekt für das Logging – alle Felder werden automatisch angezeigt."
16+
support:
17+
description: "Seit JDK 16 allgemein verfügbar (März 2021)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Objects.requireNonNullElse()"
2+
oldApproach: "Ternäre Null-Prüfung"
3+
modernApproach: "requireNonNullElse()"
4+
summary: "Einen Non-null-Wert mit einem klaren Standardwert ermitteln – kein ternärer Operator nötig."
5+
explanation: "requireNonNullElse gibt das erste Argument zurück, wenn es nicht null ist, andernfalls das zweite. Der Standardwert selbst darf nicht null sein – bei zwei null-Werten wird eine NPE geworfen, was Fehler frühzeitig aufdeckt."
6+
whyModernWins:
7+
- icon: "📖"
8+
title: "Klare Absicht"
9+
desc: "Der Methodenname beschreibt genau, was er tut."
10+
- icon: "🛡️"
11+
title: "Null-sicherer Standardwert"
12+
desc: "Auch der Standardwert wird auf null geprüft."
13+
- icon: "📏"
14+
title: "Lesbar"
15+
desc: "Besser als ein ternärer Operator für einfache Null-oder-Standard-Logik."
16+
support:
17+
description: "Seit JDK 9 allgemein verfügbar (Sept. 2017)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Deserialisierungsfilter"
2+
oldApproach: "Alles akzeptieren"
3+
modernApproach: "ObjectInputFilter"
4+
summary: "Einschränken, welche Klassen deserialisiert werden dürfen, um Angriffe zu verhindern."
5+
explanation: "ObjectInputFilter ermöglicht es, Klassen auf einer Zulassungs- oder Sperrliste einzutragen sowie die Tiefe des Objektgraphen, Array-Größen und Referenzzähler zu begrenzen. Dadurch werden Deserialisierungsschwachstellen ohne externe Bibliotheken abgewehrt."
6+
whyModernWins:
7+
- icon: "🛡️"
8+
title: "Sicherheit"
9+
desc: "Deserialisierung unerwarteter oder bösartiger Klassen verhindern."
10+
- icon: "📐"
11+
title: "Feingranular"
12+
desc: "Tiefe, Array-Größe, Referenzen und Klassenmustern kontrollieren."
13+
- icon: "🏗️"
14+
title: "JVM-weit"
15+
desc: "Einen globalen Filter für alle Deserialisierungen in der JVM setzen."
16+
support:
17+
description: "Seit JDK 9 allgemein verfügbar (Sept. 2017)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Datei-Memory-Mapping"
2+
oldApproach: "MappedByteBuffer"
3+
modernApproach: "MemorySegment mit Arena"
4+
summary: "Dateien größer als 2 GB mit deterministischer Bereinigung über MemorySegment abbilden."
5+
explanation: "Die Foreign Function & Memory API (JEP 454) führt MemorySegment für sicheren und effizienten Speicherzugriff ein. Im Gegensatz zu MappedByteBuffer unterstützt MemorySegment Dateien größer als 2 GB (Integer.MAX_VALUE), bietet deterministische Bereinigung über Arena und bessere Performance mit moderner Hardware."
6+
whyModernWins:
7+
- icon: "📏"
8+
title: "Keine Größenbeschränkung"
9+
desc: "Dateien größer als 2 GB ohne Umwege abbilden."
10+
- icon: "🔒"
11+
title: "Deterministische Bereinigung"
12+
desc: "Arena stellt sicher, dass der Speicher beim Verlassen des Gültigkeitsbereichs freigegeben wird, nicht erst beim GC."
13+
- icon: ""
14+
title: "Bessere Performance"
15+
desc: "Abgestimmt auf moderne Speichermodelle und Hardware."
16+
support:
17+
description: "Verfügbar seit JDK 22 (März 2024)"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Files.mismatch()"
2+
oldApproach: "Manueller Byte-Vergleich"
3+
modernApproach: "Files.mismatch()"
4+
summary: "Zwei Dateien effizient vergleichen, ohne sie in den Speicher zu laden."
5+
explanation: "Files.mismatch() gibt die Position des ersten abweichenden Bytes zurück oder -1, wenn die Dateien identisch sind. Es liest lazy und bricht beim ersten Unterschied ab."
6+
whyModernWins:
7+
- icon: ""
8+
title: "Speichereffizient"
9+
desc: "Lädt keine vollständigen Dateien in Byte-Arrays."
10+
- icon: "🎯"
11+
title: "Zeigt den Unterschied genau"
12+
desc: "Gibt die genaue Byte-Position des ersten Unterschieds zurück."
13+
- icon: "📏"
14+
title: "Ein Aufruf"
15+
desc: "Keine manuelle Byte-Array-Vergleichslogik."
16+
support:
17+
description: "Seit JDK 12 allgemein verfügbar (März 2019)"

0 commit comments

Comments
 (0)