Home / Packages / @flyeric0212/languages-java

@flyeric0212/languages-java

该规则解释了 Java 的约定和最佳实践。 globs: **/*.java

prpm install @flyeric0212/languages-java
0 total downloads

📄 Full Prompt Content

---
description: 该规则解释了 Java 的约定和最佳实践。
globs: **/*.java
alwaysApply: false
---

# Java 语言规范

## Java 21 特性使用
- **Record类**:用于不可变数据传输对象
  ```java
  public record UserInfo(String name, String email, LocalDateTime createdAt) {}
  ```

- **Pattern Matching**:在switch表达式中使用模式匹配
  ```java
  public String formatValue(Object value) {
      return switch (value) {
          case String s -> "String: " + s;
          case Integer i -> "Number: " + i;
          case null -> "null value";
          default -> "Unknown: " + value.toString();
      };
  }
  ```

- **Text Blocks**:用于多行字符串,特别是SQL和JSON
  ```java
  String sql = """
      SELECT u.name, u.email
      FROM users u
      WHERE u.status = 'ACTIVE'
      ORDER BY u.created_at DESC
      """;
  ```

- **Sealed Classes**:用于受限的类层次结构
  ```java
  public sealed class Result<T> permits Success, Error {
      // 基类定义
  }

  public final class Success<T> extends Result<T> {
      private final T data;
      // 实现
  }
  ```

- **Virtual Threads**:用于高并发场景
  ```java
  try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
      executor.submit(() -> {
          // 高并发任务
      });
  }
  ```

## 命名约定
- **类名**:使用帕斯卡命名法(如 `UserController`、`OrderService`)
- **方法和变量名**:使用驼峰命名法(如 `findUserById`、`isOrderValid`)
- **常量**:使用全大写下划线分隔(如 `MAX_RETRY_ATTEMPTS`、`DEFAULT_PAGE_SIZE`)
- **包名**:使用小写,按功能模块划分(如 `com.example.user.domain`)

## 代码风格
- **缩进**:使用4个空格,不使用Tab
- **行长度**:每行不超过120个字符
- **大括号**:使用Egyptian风格(开括号不换行)
- **空行**:方法间使用一个空行分隔,逻辑块间使用空行分隔

## 异常处理
- **检查异常**:谨慎使用检查异常,优先使用运行时异常
- **异常链**:保持异常链,不丢失原始异常信息
  ```java
  try {
      // 可能抛出异常的代码
  } catch (SpecificException e) {
      throw new BusinessException("业务处理失败", e);
  }
  ```

- **资源管理**:使用try-with-resources自动管理资源
  ```java
  try (var reader = Files.newBufferedReader(path)) {
      // 使用reader
  }
  ```

## 集合和流处理
- **集合选择**:根据使用场景选择合适的集合类型
  - `ArrayList`:随机访问频繁
  - `LinkedList`:插入删除频繁
  - `HashMap`:键值对存储
  - `TreeMap`:需要排序的键值对

- **Stream API**:充分利用Stream API进行函数式编程
  ```java
  List<String> activeUserNames = users.stream()
      .filter(user -> user.isActive())
      .map(User::getName)
      .sorted()
      .toList();
  ```

## 并发编程
- **线程安全**:优先使用不可变对象和线程安全的集合
- **锁机制**:合理使用synchronized、ReentrantLock等锁机制
- **并发集合**:使用ConcurrentHashMap、CopyOnWriteArrayList等并发集合
- **CompletableFuture**:使用CompletableFuture处理异步操作
  ```java
  CompletableFuture<String> future = CompletableFuture
      .supplyAsync(() -> fetchData())
      .thenApply(data -> processData(data))
      .exceptionally(throwable -> "默认值");
  ```

## 内存管理
- **对象创建**:避免在循环中创建不必要的对象
- **字符串处理**:大量字符串操作使用StringBuilder
- **集合大小**:预估集合大小,避免频繁扩容
- **弱引用**:适当使用WeakReference避免内存泄漏

## 泛型使用
- **类型安全**:充分利用泛型提供类型安全
- **通配符**:正确使用上界通配符(? extends)和下界通配符(? super)
- **类型擦除**:理解泛型类型擦除的限制
  ```java
  public <T extends Comparable<T>> T findMax(List<T> list) {
      return list.stream().max(Comparable::compareTo).orElse(null);
  }
  ```

## 注解使用
- **标准注解**:正确使用@Override、@Deprecated、@SuppressWarnings等
- **自定义注解**:合理创建自定义注解简化代码
- **注解处理**:了解编译时和运行时注解处理

## 测试规范
- **单元测试**:使用JUnit 5编写单元测试
- **测试命名**:测试方法使用描述性命名(如 `shouldReturnUserWhenValidIdProvided`)
- **断言**:使用AssertJ提供更好的断言体验
  ```java
  @Test
  void shouldCalculateCorrectTotal() {
      // Given
      List<Item> items = List.of(
          new Item("item1", 10.0),
          new Item("item2", 20.0)
      );

      // When
      double total = calculator.calculateTotal(items);

      // Then
      assertThat(total).isEqualTo(30.0);
  }
  ```

## 性能优化
- **算法复杂度**:选择合适的算法和数据结构
- **缓存策略**:合理使用缓存减少重复计算
- **懒加载**:对于昂贵的操作使用懒加载
- **批量处理**:批量处理数据库操作和网络请求

## 代码质量
- **单一职责**:每个类和方法只负责一个功能
- **开闭原则**:对扩展开放,对修改关闭
- **依赖倒置**:依赖抽象而不是具体实现
- **接口隔离**:使用小而专一的接口
- **代码复用**:提取公共逻辑,避免重复代码

## 文档和注释
- **JavaDoc**:为公共API编写完整的JavaDoc
- **代码注释**:为复杂逻辑添加解释性注释
- **TODO标记**:使用TODO标记待完成的工作
  ```java
  /**
   * 计算用户积分
   *
   * @param userId 用户ID
   * @param actions 用户行为列表
   * @return 计算得出的积分值
   * @throws UserNotFoundException 当用户不存在时抛出
   */
  public int calculatePoints(Long userId, List<UserAction> actions) {
      // TODO: 实现积分计算逻辑
      return 0;
  }
  ```


═══════════════════════════════════════════════════════════════════
═══ ENGLISH TRANSLATION ═══
═══════════════════════════════════════════════════════════════════

---
description: Languages Java Development Guidelines (Translation)
---

# Languages Java Guidelines - English Translation

**Note**: This package contains Chinese cursor rules for Languages Java.

**Original Language**: Chinese (Simplified)

**Content Summary**: This package provides comprehensive development guidelines, best practices, and coding standards for Languages Java. The rules cover code organization, naming conventions, design patterns, testing strategies, and performance optimization.

**Translation Status**: Automated translation placeholder. For accurate technical translation of specific terms and context, please:
1. Use the original Chinese content above as authoritative reference
2. Refer to official Languages Java documentation in English
3. The technical patterns and code examples remain universal across languages

**How to Use**:
- Code blocks and examples use universal syntax
- Technical terms (APIs, methods, libraries) are typically in English even in Chinese text
- Structure and organization principles translate directly to English development practices

**Content Length**: 4087 characters of detailed technical guidance

For community-contributed English translation, please refer to the source repository.

💡 Suggested Test Inputs

Loading suggested inputs...

🎯 Community Test Results

Loading results...

📦 Package Info

Format
cursor
Type
rule
Category
languages
License
MIT

🔗 Links