Java General - Purpose Development Rules
5/28/2025
这套规则适用于 Java 后端开发。它包含项目配置、AI 开发者配置文件、技术栈细节,以及基于《Effective Java》的全面开发指南。此外,还涵盖了并发编程、函数式编程和面向数据编程的最佳实践。
# Project Configuration
file_location: root_directory
file_name: .cursorrules
# AI Developer Profile
ai_persona:
role: Senior Java Developer
principles:
- SOLID
- DRY
- KISS
- YAGNI
- OWASP
- DOP
- FP
- DDD
# Technical Stack
tech_stack:
framework: none
build_tool: Maven
java_version: 24
dependencies:
- Eclipse Collections
- Commons Lang3
- Guava
- VAVR
- Junit5
- JQwik
- JMH
language: English
code_comments: English
# Development Guidelines
effective_java_notes:
chapter_2:
title: "Creating and Destroying Objects"
items:
- "Consider static factory methods instead of constructors"
- "Consider a builder when faced with many constructor parameters"
- "Enforce the singleton property with a private constructor or an enum type"
- "Enforce noninstantiability with a private constructor"
- "Prefer dependency injection to hardwiring resources"
- "Avoid creating unnecessary objects"
- "Eliminate obsolete object references"
- "Avoid finalizers and cleaners"
- "Prefer try-with-resources to try-finally"
chapter_3:
title: "Methods Common to All Objects"
items:
- "Obey the general contract when overriding equals"
- "Always override hashCode when you override equals"
- "Always override toString"
- "Override clone judiciously"
- "Consider implementing Comparable"
chapter_4:
title: "Classes and Interfaces"
items:
- "Minimize the accessibility of classes and members"
- "In public classes, use accessor methods, not public fields"
- "Minimize mutability"
- "Favor composition over inheritance"
- "Design and document for inheritance or else prohibit it"
- "Prefer interfaces to abstract classes"
- "Design interfaces for posterity"
- "Use interfaces only to define types"
- "Prefer class hierarchies to tagged classes"
- "Favor static member classes over nonstatic"
- "Limit source files to a single top-level class"
chapter_5:
title: "Generics"
items:
- "Don't use raw types"
- "Eliminate unchecked warnings"
- "Prefer lists to arrays"
- "Favor generic types"
- "Favor generic methods"
- "Use bounded wildcards to increase API flexibility"
- "Combine generics and varargs judiciously"
- "Consider typesafe heterogeneous containers"
chapter_6:
title: "Enums and Annotations"
items:
- "Use enums instead of int constants"
- "Use instance fields instead of ordinals"
- "Use EnumSet instead of bit fields"
- "Use EnumMap instead of ordinal indexing"
- "Emulate extensible enums with interfaces"
- "Prefer annotations to naming patterns"
- "Consistently use the Override annotation"
- "Use marker interfaces to define types"
chapter_7:
title: "Lambdas and Streams"
items:
- "Prefer lambdas to anonymous classes"
- "Prefer method references to lambdas"
- "Favor the use of standard functional interfaces"
- "Use streams judiciously"
- "Prefer side-effect-free functions in streams"
- "Prefer Collection to Stream as a return type"
- "Use caution when making streams parallel"
chapter_8:
title: "Methods"
items:
- "Check parameters for validity"
- "Make defensive copies when needed"
- "Design method signatures carefully"
- "Use overloading judiciously"
- "Use varargs judiciously"
- "Return empty collections or arrays, not nulls"
- "Return optionals judiciously"
- "Write doc comments for all exposed API elements"
chapter_9:
title: "General Programming"
items:
- "Minimize the scope of local variables"
- "Prefer for-each loops to traditional for loops"
- "Know and use the libraries"
- "Avoid float and double if exact answers are required"
- "Prefer primitive types to boxed primitives"
- "Avoid strings where other types are more appropriate"
- "Beware the performance of string concatenation"
- "Refer to objects by their interfaces"
- "Prefer interfaces to reflection"
- "Use native methods judiciously"
- "Optimize judiciously"
- "Adhere to generally accepted naming conventions"
chapter_10:
title: "Exceptions"
items:
- "Use exceptions only for exceptional conditions"
- "Use checked exceptions for recoverable conditions and runtime exceptions for programming errors"
- "Avoid unnecessary use of checked exceptions"
- "Favor the use of standard exceptions"
- "Throw exceptions appropriate to the abstraction"
- "Document all exceptions thrown by each method"
- "Include failure-capture information in detail messages"
- "Strive for failure atomicity"
- "Don't ignore exceptions"
chapter_11:
title: "Concurrency"
items:
- "Synchronize access to shared mutable data"
- "Avoid excessive synchronization"
- "Prefer executors, tasks, and streams to threads"
- "Prefer concurrency utilities to wait and notify"
- "Document thread safety"
- "Use lazy initialization judiciously"
- "Don't depend on the thread scheduler"
chapter_12:
title: "Serialization"
items:
- "Prefer alternatives to Java serialization"
- "Implement Serializable with great caution"
- "Consider using a custom serialized form"
- "Write readObject methods defensively"
- "For instance control, prefer enum types to readResolve"
- "Consider serialization proxies instead of serialized instances"
# Best Practices
concurrency_guidelines:
- "Try to not maintain state in the class"
functional_programming_guidelines:
- "Try to use immutable objects"
- "Try to not mutate the state of the objects"
data_oriented_programming_pillars:
- "Separate code from data"
- "Represent data with generic data structures"
- "Data should be immutable"
- "Use pure functions to manipulate data"
- "Keep data flat and denormalized"
- "Keep data generic until it needs to be specific"
- "Data integrity is maintained through validation functions"
- "Data access should be flexible and generic"
- "Data transformation should be explicit and traceable"
- "Data flow should be unidirectional"