Effective Java 2nd Edition
From My Limbic Wiki
Book: Effective java 2nd Edition
10 commandments:
- Use static factories and builders wisely.
- Make classes immutable when possible.
- Favor composition over inheritance.
- Use Generics properly β never raw types.
- Prefer Enums over constant values.
- Validate arguments and maintain invariants.
- Minimize variable scope and visibility.
- Use exceptions only for exceptional cases.
- Leverage modern concurrency utilities.
- Write readable, safe, and self-documenting code.
1. Creating and Destroying Objects
Key points
- Item 1 β Consider static factory methods instead of constructorsStatic factories have names, can return cached instances or subtypes, and allow better control of object creation.
<code>Boolean.valueOf(true);</code>
- Item 2 β Consider a builder when faced with many constructor parametersUse the Builder pattern to replace telescoping constructors:
<code>
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
</code>
- Item 3 β Enforce the Singleton property with a private constructor or an enum
- Prefer
enumsingletons: - Item 5 β Prefer dependency injection to hardwiring resources
- Pass dependencies through constructors instead of creating them internally.
- Item 7 β Avoid finalizers
- Theyβre unreliable and slow. Use
try-with-resourcesorCleanerinstead.
π§© 2. Methods Common to All Objects
β Key points
- Item 8 β Obey the general contract when overriding
equalsMust be reflexive, symmetric, transitive, consistent, and return false fornull. - Item 9 β Always override
hashCodewhen you overrideequalsOtherwise, your objects wonβt work properly inHashMap,HashSet, etc. - Item 10 β Always override
toStringMake it human-readable and useful for debugging/logging. - Item 12 β Consider implementing
ComparableEnables sorting and ordering:
π§± 3. Classes and Interfaces
β Key points
- Item 13 β Minimize the accessibility of classes and members Encapsulation is key. Hide as much as possible (
private,package-private). - Item 15 β Favor immutability Immutable objects are thread-safe, simple, and reliable. Rules:
- No setters
- All fields
final - Donβt leak
thisin constructors
- Item 16 β Favor composition over inheritance Inheritance creates tight coupling. Prefer wrapping a member instead:
- Item 17 β Design and document for inheritance, or prohibit it If you donβt want subclasses, mark the class
final. - Item 18 β Prefer interfaces to abstract classes A class can implement multiple interfaces but extend only one class.
π§ 4. Generics
β Key points
- Item 23 β Donβt use raw types Always use parameterized types:
List<String>instead ofList. - Item 25 β Prefer lists to arrays Arrays are covariant and unsafe, while generics are type-safe.
- Item 26 β Favor generic methods
- Item 27 β Use bounded wildcards to increase API flexibility
<? extends T>for producers<? super T>for consumers β PECS rule: Producer Extends, Consumer Super
π 5. Enums and Annotations
β Key points
- Item 30 β Use enums instead of int constants Safer, more powerful, can have fields and methods.
- Item 35 β Prefer annotations to naming patterns Example:
@Testinstead of naming test methodstestSomething().
π§° 6. Methods
β Key points
- Item 38 β Check parameters for validity Validate arguments early, e.g.:
- Item 39 β Make defensive copies when needed Prevent callers from modifying internal state:
- Item 40 β Design method signatures carefully Keep APIs small, intuitive, and consistent.
π 7. General Programming
β Key points
- Item 45 β Minimize the scope of local variables Declare variables as close as possible to their first use.
- Item 46 β Prefer for-each loops to traditional for loops Cleaner and safer:
- Item 48 β Avoid float and double if exact answers are required Use
BigDecimalfor monetary values. - Item 49 β Prefer primitives to boxed primitives Avoid
Integer,Long, etc., unless necessary. - Item 50 β Avoid strings where other types are more appropriate Donβt use
Stringfor enums, IDs, or complex data.
π₯ 8. Exceptions
β Key points
- Item 58 β Use exceptions only for exceptional conditions Donβt use exceptions for control flow.
- Item 59 β Favor the use of standard exceptions Use built-ins like
IllegalArgumentException,NullPointerException, etc. - Item 63 β Include failure-capture information in detail messages Exception messages should help diagnose the issue.
π§΅ 9. Concurrency
β Key points
- Item 66 β Synchronize access to shared mutable data Use synchronization or concurrency utilities to prevent race conditions.
- Item 68 β Prefer executors and tasks to threads Use:
- Item 69 β Prefer concurrency utilities to wait and notify Use
BlockingQueue,CountDownLatch, etc., instead of manual thread coordination.
π¦ 10. Serialization
β Key points
- Item 74 β Implement Serializable with great caution Serialization breaks encapsulation and can introduce bugs or security issues. Avoid it if possible, or mark fields
transient.