java-21 — скилл для Claude Code: паттерны Java 21
Подсказывает агенту, как писать код на Java 21: records, sealed-типы, виртуальные потоки. Пригодится, когда проект уже перешёл на 21-ю версию.
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a claude-codeЧто делает java-21
Скилл подгружается, когда агент пишет код на Java 21, проектирует неизменяемые DTO и value-объекты, строит закрытые иерархии или работает с блокирующим вводом-выводом. Внутри — три паттерна с примерами: record с проверкой в компактном конструкторе, sealed-интерфейс со switch по образцу и виртуальные потоки через Executors.newVirtualThreadPerTaskExecutor().
Отдельный раздел разбирает антипаттерны. Мутабельный DTO с публичными полями и запуск сырого new Thread(...) на каждый запрос помечены как плохая практика — второй вариант дорогой и не ограничен по числу потоков. Есть таблица быстрого доступа: задача слева, нужный паттерн справа.
Скилл рассчитан именно на 21-ю версию Java: records, sealed-типы и виртуальные потоки появились в ней, на более старых JDK примеры просто не соберутся. Это повод проверить, какая версия стоит в вашем pom.xml или build.gradle, прежде чем ставить.
Какие задачи решает
- описать неизменяемый DTO с валидацией в конструкторе
- закрыть иерархию платежей sealed-интерфейсом и разобрать её через switch
- обработать блокирующий ввод-вывод без большого пула потоков
- заменить мутабельный класс-переносчик данных на record
- убрать запуск нового потока на каждый запрос
Примеры запросов агенту
- Опиши record Email с проверкой значения в компактном конструкторе
- Сделай sealed-интерфейс Payment с Card и BankTransfer и разбери его через switch
- Перепиши загрузку списка URL на виртуальные потоки через Executors.newVirtualThreadPerTaskExecutor()
Как установить java-21
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a claude-code2Вручную: положить файлы
~/.claude/skills/java-21/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/java-21/
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a codex2Вручную: положить файлы
.agents/skills/java-21/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a cursor2Вручную: положить файлы
.cursor/skills/java-21/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Gentleman-Programming/Gentleman-Skills java-212Вручную: положить файлы
.github/skills/java-21/SKILL.md1Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a gemini-cli2Командой платформы
gemini skills install https://github.com/Gentleman-Programming/Gentleman-Skills --path community/java-21Вручную: положить файлы
.devin/skills/java-21/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о java-21
Как установить java-21 в Claude?
Выполните npx skills add Gentleman-Programming/Gentleman-Skills --skill java-21 -a claude-code. Файл скилла окажется по пути ~/.claude/skills/java-21/SKILL.md.
Что делает скилл java-21?
Даёт агенту готовые паттерны Java 21: records для неизменяемых данных, sealed-типы со switch по образцу, виртуальные потоки для блокирующих вызовов. Плюс список антипаттернов, которых стоит избегать.
Для каких версий Java подходит скилл?
Для Java 21. Records, sealed-типы и виртуальные потоки — возможности этой версии, на более старых JDK примеры из скилла не скомпилируются.
Исходный текст
SKILL.md · MIT
---
name: java-21
description: >
Java 21 language and runtime patterns for modern, safe code.
Trigger: When writing Java 21 code using records, sealed types, or virtual threads.
metadata:
author: diegnghrmr
version: "1.0"
---
## When to Use
Load this skill when:
- Writing Java 21 application or library code
- Designing immutable DTOs or value objects
- Modeling closed hierarchies with sealed types
- Using virtual threads for blocking I/O
## Critical Patterns
### Pattern 1: Records for immutable data
Use records for DTOs and value objects, validate in compact constructors.
### Pattern 2: Sealed types + pattern matching
Use sealed interfaces/classes and switch pattern matching for exhaustiveness.
### Pattern 3: Virtual threads for I/O
Use virtual threads to handle blocking I/O without large thread pools.
## Code Examples
### Example 1: Record with validation
```java
package com.acme.user;
public record Email(String value) {
public Email {
if (value == null || !value.contains("@")) {
throw new IllegalArgumentException("Invalid email");
}
}
}
```
### Example 2: Sealed hierarchy + switch pattern matching
```java
package com.acme.payment;
public sealed interface Payment permits Card, BankTransfer { }
public record Card(String last4) implements Payment { }
public record BankTransfer(String iban) implements Payment { }
public final class PaymentPrinter {
public String describe(Payment payment) {
return switch (payment) {
case Card card -> "card-" + card.last4();
case BankTransfer bank -> "iban-" + bank.iban();
};
}
}
```
### Example 3: Virtual threads for blocking calls
```java
package com.acme.io;
import java.util.concurrent.Executors;
public final class Fetcher {
public void fetchAll(java.util.List<String> urls) throws Exception {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (String url : urls) {
executor.submit(() -> blockingFetch(url));
}
}
}
private void blockingFetch(String url) {
// perform blocking I/O here
}
}
```
## Anti-Patterns
### Don't: Use mutable data carriers
```java
// BAD: mutable DTO
public class UserDto {
public String name;
public String email;
}
```
### Don't: Spin up raw platform threads per request
```java
// BAD: expensive and unbounded
new Thread(() -> blockingFetch("https://api" )).start();
```
## Quick Reference
| Task | Pattern |
|------|---------|
| Immutable DTOs | Use records with validation |
| Closed hierarchies | Use sealed interfaces + switch |
| Blocking I/O scale | Use virtual threads executor |
## Resources
- Java 21 Release Notes: https://www.oracle.com/java/technologies/javase/21-relnote-issues.html
- JEP Index: https://openjdk.org/jeps/0
© diegnghrmr · MIT · Gentleman-Programming/Gentleman-Skills