coding-java · git:20260719.d6bc5a1 · 2026-07-19 · sha256 01e5e441b17e0a99
coding-java git:20260719.d6bc5a1A
Immutable. This exact content is served forever at /api/v1/blob/01e5e441b17e0a99.
--- name: coding-java description: Java naming conventions, exception hierarchy, import patterns, and quality overrides for ECHO Protocol. --- # Java Coding Standards <!-- Load this when protocol.config.yaml has language: "java" --> ## Naming Conventions | Element | Convention | Example | |---------|-----------|---------| | Classes | PascalCase | `UserProfile`, `GameState` | | Interfaces | PascalCase | `Serializable`, `Renderable` | | Methods | camelCase | `calculateDistance`, `spawnUnit` | | Variables | camelCase | `playerCount`, `isValid` | | Constants | UPPER_SNAKE_CASE | `MAX_PLAYERS`, `TILE_SIZE` | | Enums | PascalCase (class), UPPER_SNAKE_CASE (values) | `TileType.GRASSLAND` | | Packages | lowercase, reversed domain | `com.example.gameengine` | | Files | PascalCase.java (match class name) | `UserProfile.java` | ## Patterns ### Error Handling - Use custom exception hierarchy extending `Exception` - Catch specific exceptions, never bare `Exception` - Use try-with-resources for AutoCloseable - Log at catch points with context ### Concurrency - Prefer `ExecutorService` over raw threads - Use `synchronized` or `ReentrantLock` for shared state - Immutable objects preferred over synchronization - Use `CompletableFuture` for async composition ### Imports - Group: java → javax → external → internal - No wildcard imports - Use IDE auto-import management ## File Structure ```text src/main/java/com/example/ ├── Application.java # Entry point ├── config/ │ └── AppConfig.java # Configuration ├── exception/ │ └── AppException.java # Custom exceptions ├── model/ │ └── [Domain].java # Data classes ├── service/ │ └── [Domain]Service.java # Business logic src/test/java/ └── [Mirror structure] ``` ## Anti-Patterns to Flag - [ ] Bare `catch (Exception e)` - [ ] Mutable static fields - [ ] God classes (>300 lines) - [ ] Deep inheritance hierarchies (>3 levels) - [ ] `null` returns instead of Optional - [ ] Magic numbers (extract to constants) ## Quality Overrides These override the defaults in `protocol.config.yaml` when Java is the configured language. | Setting | Default | Java Override | Reason | |---------|---------|---------------|--------| | `max_file_lines` | 300 | 350 | Java boilerplate (imports, generics) adds lines | | `max_function_lines` | 50 | 40 | Java methods should be shorter due to verbosity | | `max_line_length` | 100 | 120 | Standard Java convention |