java

📁 g1joshi/agent-skills 📅 3 days ago
2
总安装量
2
周安装量
#72894
全站排名
安装命令
npx skills add https://github.com/g1joshi/agent-skills --skill java

Agent 安装分布

mcpjam 2
claude-code 2
replit 2
junie 2
zencoder 2

Skill 文档

Java

Modern Java development with Java 17+ features, streams, and enterprise patterns.

When to Use

  • Working with .java files
  • Building enterprise applications with Spring Boot
  • Android development with Kotlin interop
  • Microservices architecture

Quick Start

// Modern record with validation
public record User(String id, String name, String email) {
    public User {
        Objects.requireNonNull(id, "id must not be null");
        Objects.requireNonNull(name, "name must not be null");
    }
}

Core Concepts

Records (Java 17+)

// Immutable data carriers
public record User(String id, String name, String email) {
    // Compact constructor for validation
    public User {
        Objects.requireNonNull(id, "id must not be null");
    }

    // Additional methods
    public String displayName() {
        return name.toUpperCase();
    }
}

Sealed Classes

public sealed interface Result<T> permits Success, Failure {
    T getOrThrow();
}

public record Success<T>(T value) implements Result<T> {
    @Override
    public T getOrThrow() { return value; }
}

public record Failure<T>(Exception error) implements Result<T> {
    @Override
    public T getOrThrow() { throw new RuntimeException(error); }
}

Common Patterns

Streams & Collections

// Immutable collections
var list = List.of("a", "b", "c");
var map = Map.of("key1", "value1", "key2", "value2");

// Stream operations
List<String> names = users.stream()
    .filter(User::active)
    .map(User::name)
    .sorted()
    .toList();

// Collectors grouping
Map<String, List<User>> byRole = users.stream()
    .collect(Collectors.groupingBy(User::role));

Optional

Optional<User> user = Optional.ofNullable(findUser(id));

String name = user
    .map(User::name)
    .orElse("Unknown");

user.ifPresentOrElse(
    u -> process(u),
    () -> handleMissing()
);

Best Practices

Do:

  • Use var for local variables with obvious types
  • Prefer records for data transfer objects
  • Use Optional instead of null checks
  • Use virtual threads for I/O-bound tasks (Java 21+)

Don’t:

  • Use raw types for collections (use generics)
  • Use Optional.get() without checking
  • Catch generic Exception (be specific)
  • Create mutable DTOs unnecessarily

Troubleshooting

Error Cause Solution
NullPointerException Null value access Use Optional or null checks
ClassCastException Invalid type cast Use instanceof pattern matching
ConcurrentModificationException Modifying during iteration Use Iterator.remove() or streams

References