Agent Skills: Java 25 Expert Skill

Expert knowledge of Java 25 features including virtual threads, pattern matching,

UncategorizedID: diegopacheco/ai-playground/java-expert

Install this agent skill to your local

pnpm dlx add-skill https://github.com/diegopacheco/ai-playground/tree/HEAD/pocs/java-25-spring-boot-4-spring-ai-skills/src/main/resources/.claude/skills/java-expert

Skill Files

Browse the full folder contents for java-expert.

Download Skill

Loading file tree…

pocs/java-25-spring-boot-4-spring-ai-skills/src/main/resources/.claude/skills/java-expert/SKILL.md

Skill Metadata

Name
java-expert
Description
Expert knowledge of Java 25 features including virtual threads, pattern matching,

Java 25 Expert Skill

Overview

Provides expert guidance on Java 25 language features and best practices.

Key Java 25 Features

Virtual Threads (Project Loom)

  • Use Thread.ofVirtual().start(runnable) for lightweight concurrency
  • Virtual threads are ideal for I/O-bound workloads
  • Use Executors.newVirtualThreadPerTaskExecutor() for thread pools

Pattern Matching

  • Switch expressions with pattern matching
  • Deconstruction patterns for records
  • Guarded patterns with when clauses

Records

  • Immutable data carriers with auto-generated constructors, equals, hashCode, toString
  • Custom compact constructors for validation

Sealed Classes

  • Restrict class hierarchies with sealed, permits
  • Enable exhaustive pattern matching

String Templates (Preview)

  • Template processors like STR."\{value}"
  • Custom template processors

Best Practices

  • Prefer records over plain POJOs for data transfer
  • Use sealed interfaces for algebraic data types
  • Leverage virtual threads for high-throughput servers
  • Use pattern matching to eliminate instanceof casts

Examples

record Point(int x, int y) {}

sealed interface Shape permits Circle, Rectangle {}
record Circle(Point center, double radius) implements Shape {}
record Rectangle(Point topLeft, Point bottomRight) implements Shape {}

String describe(Shape shape) {
    return switch (shape) {
        case Circle c when c.radius() > 10 -> "Large circle";
        case Circle c -> "Small circle";
        case Rectangle r -> "Rectangle";
    };
}