Skillshub java-language
Modern Java 21+ standards including Records, Pattern Matching, and Virtual Threads. Use when working with Java records, sealed classes, switch expressions, text blocks, Optional, or upgrading from older Java versions. (triggers: **/*.java, pom.xml, build.gradle, record, sealed, switch, var, Optional, stream, VirtualThread, instanceof, text block)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/java-language" ~/.claude/skills/comeonoliver-skillshub-java-language && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/java-language/SKILL.mdsource content
Java Language Patterns
Priority: P0 (CRITICAL)
Modern Java (21+) standards for concise, immutable, and expressive code.
Implementation Guidelines
- Records: Use record for immutable DTOs/Value Objects. Records auto-generate equals, hashCode, toString. Avoid Lombok @Data on Pojos.
- Local Variables: Use
for inferred types. Explicitly type interface variables.var - Switch: Use Switch Expressions (->) and Pattern Matching over complex if/else chains.
- Text Blocks: Use
for JSON, SQL, or multi-line strings.""" (Text Blocks) - Pattern Matching: Use
with pattern binding:instanceof
.if (obj instanceof String s) - Sealed Classes: Use sealed interface/class with permits clause for domain-driven restricted hierarchies. Switch expressions are then exhaustive switch (compiler-verified).
- Collections: Use
,List.of()
, andMap.of()
for immutable collections.Set.of() - Streams: Use
pipelines for functional transformations. Usestream()
(Java 16+)..toList() - Optional: Utilize
for return types. UseOptional<T>
or.ifPresentOrElse()
..orElseThrow() - Virtual Threads: Favor
for I/O-heavy workloads.Executors.newVirtualThreadPerTaskExecutor()
Anti-Patterns
- No Nulls: Return Optional or empty collections; avoid null parameters.
- No Raw Types: Always use generics; never use raw List or Map.
- No Old Switch: Use switch expressions (->); avoid fall-through.
- No Manual get/set: Use Records or value objects instead.
- No synchronized blocks: Use java.util.concurrent or Virtual Threads instead.