--- name: coding-standard-java description: Enforce Java coding standards including camelCase variables, PascalCase classes, and PascalCase filenames matching class names. --- # Java Coding Standards When reviewing or generating Java code, follow these rules: ## File Naming - **Source files:** PascalCase matching the public class name (e.g., `UserService.java`) - **One public class per file:** File name must match the public class name exactly - **Test files:** Class name with `Test` suffix (e.g., `UserServiceTest.java`) - **Interface files:** PascalCase (e.g., `Comparable.java`, `UserRepository.java`) ## Package Naming - **Packages:** All lowercase, dot-separated (e.g., `com.example.service`, `org.project.utils`) - **No underscores or hyphens** in package names - Follow reverse domain name convention ## Variable Naming - **Local variables:** camelCase (e.g., `userName`, `isActive`, `totalCount`) - **Instance variables:** camelCase (e.g., `userId`, `createdAt`) - **Constants:** UPPER_SNAKE_CASE with `static final` (e.g., `MAX_RETRIES`, `DEFAULT_TIMEOUT`) - **Boolean variables:** Prefix with `is`, `has`, `can`, `should` (e.g., `isEnabled`, `hasPermission`) ## Method Naming - **Methods:** camelCase, verb or verb phrase (e.g., `calculateTotal()`, `getUserById()`) - **Getters:** `get` prefix (e.g., `getName()`, `getId()`) - **Setters:** `set` prefix (e.g., `setName()`, `setId()`) - **Boolean getters:** `is` or `has` prefix (e.g., `isActive()`, `hasChildren()`) - **Factory methods:** `create`, `of`, `from`, `valueOf` (e.g., `createInstance()`, `of()`) ## Class/Interface Naming - **Classes:** PascalCase, noun or noun phrase (e.g., `UserService`, `OrderProcessor`) - **Interfaces:** PascalCase, adjective or noun (e.g., `Comparable`, `UserRepository`) - **Abstract classes:** PascalCase, optionally prefix with `Abstract` (e.g., `AbstractHandler`) - **Exception classes:** PascalCase with `Exception` suffix (e.g., `InvalidInputException`) - **Enums:** PascalCase for type, UPPER_SNAKE_CASE for values ## Generics - **Type parameters:** Single uppercase letter (e.g., `T`, `E`, `K`, `V`) - **Meaningful names:** When clarity needed (e.g., ``) ## Organization - Package statement first - Import statements (java.*, javax.*, third-party, project imports) - Class declaration with fields, constructors, methods - Public methods before private methods