Agent Skills
› Taoidle/plan-cascade
› java-best-practices
java-best-practices
GitHub提供Java 17+编码最佳实践,涵盖代码风格、现代特性(Records/Sealed)、错误处理、项目结构及测试规范。用于指导Java代码的编写与审查,提升代码质量与现代性。
Trigger Scenarios
编写Java代码
审查Java代码
Java 17及以上版本开发
Install
npx skills add Taoidle/plan-cascade --skill java-best-practices -g -y
SKILL.md
Frontmatter
{
"name": "java-best-practices",
"license": "MIT",
"metadata": {
"author": "plan-cascade",
"version": "1.0.0"
},
"description": "Java coding best practices. Use when writing or reviewing Java code (17+). Covers modern features, error handling, and patterns."
}
Java Best Practices (17+)
Code Style
| Rule | Guideline |
|---|---|
| Formatter | google-java-format |
| Analysis | SpotBugs, Error Prone |
| Naming | Clear, no abbreviations |
Modern Features
| Feature | Usage |
|---|---|
| Records | Immutable data carriers |
| Sealed classes | Restricted hierarchies |
| Pattern matching | instanceof with binding |
var |
Local type inference |
public record User(String id, String name) {}
if (obj instanceof String s && !s.isEmpty()) { process(s); }
public sealed interface Result<T> permits Success, Failure {}
record Success<T>(T value) implements Result<T> {}
record Failure<T>(Exception error) implements Result<T> {}
Error Handling
| Rule | Guideline |
|---|---|
| Specific exceptions | Not bare Exception |
| Try-with-resources | For AutoCloseable |
try (var reader = new BufferedReader(new FileReader(path))) {
return reader.lines().toList();
} catch (IOException e) {
throw new ConfigException("Failed: " + path, e);
}
Project Structure
src/main/java/com/example/{domain,service}/
src/test/java/
pom.xml or build.gradle
Common Patterns
| Pattern | Usage |
|---|---|
| Optional | Null-safe returns |
| Stream API | Functional collections |
| Builder | Complex construction |
public Optional<User> findById(String id) {
return Optional.ofNullable(users.get(id));
}
Anti-Patterns
| Avoid | Use Instead |
|---|---|
| Returning null | Optional<T> |
| Mutable data | Records |
instanceof chains |
Pattern matching |
Testing (JUnit 5 + AssertJ)
@Test void shouldProcess() {
var service = new Service(mockRepo);
var result = service.process(input);
assertThat(result.status()).isEqualTo(SUCCESS);
}
Version History
- 5223f82 Current 2026-07-19 09:26


