Study group of the Effective Java book, with code samples
2 Creating and Destroying Objects | |
Item 1: Consider static factory methods instead of constructors | Sier |
Item 2: Consider a builder when faced with many constructor parameters | |
Item 3: Enforce the singleton property with a private constructor or an enum type | |
Item 4: Enforce noninstantiability with a private constructor | |
Item 5: Avoid creating unnecessary objects | |
Item 6: Eliminate obsolete object references | |
Item 7: Avoid finalizers | |
3 Methods Common to All Objects | |
Item 8: Obey the general contract when overriding equals | Miriam |
Item 9: Always override hashCode when you override equals | |
Item 10: Always override toString | |
Item 11: Override clone judiciously | |
Item 12: Consider implementing Comparable | |
4 Classes and Interfaces | |
Item 13: Minimize the accessibility of classes and members | Ernesto |
Item 14: In public classes, use accessor methods, not public fields | |
Item 15: Minimize mutability | |
Item 16: Favor composition over inheritance | |
Item 17: Design and document for inheritance or else prohibit it | Dionicio |
Item 18: Prefer interfaces to abstract classes | |
Item 19: Use interfaces only to define types | |
Item 20: Prefer class hierarchies to tagged classes | |
Item 21: Use function objects to represent strategies | |
Item 22: Favor static member classes over nonstatic | |
5 Generics | |
Item 23: Don't use raw types in new code | Zusscell |
Item 24: Eliminate unchecked warnings | |
Item 25: Prefer lists to arrays | |
Item 26: Favor generic types | |
Item 27: Favor generic methods | |
Item 28: Use bounded wildcards to increase API flexibility | |
Item 29: Consider typesafe heterogeneous containers | |
6 Enums and Annotations | |
Item 30: Use enums instead of int constants | Alex |
Item 31: Use instance fields instead of ordinals | |
Item 32: Use EnumSet instead of bit fields | |
Item 33: Use EnumMap instead of ordinal indexing | |
Item 34: Emulate extensible enums with interfaces | |
Item 35: Prefer annotations to naming patterns | |
Item 36: Consistently use the Override annotation | |
Item 37: Use marker interfaces to define types | |
7 Methods | |
Item 38: Check parameters for validity | Pedro |
Item 39: Make defensive copies when needed | |
Item 40: Design method signatures carefully | |
Item 41: Use overloading judiciously | |
Item 42: Use varargs judiciously | |
Item 43: Return empty arrays or collections, not nulls | |
Item 44: Write doc comments for all exposed API elements | |
8 General Programming | |
Item 45: Minimize the scope of local variables | Luis |
Item 46: Prefer for-each loops to traditional for loops | |
Item 47: Know and use the libraries | |
Item 48: Avoid float and double if exact answers are required | |
Item 49: Prefer primitive types to boxed primitives | |
Item 50: Avoid strings where other types are more appropriate | Dionicio |
Item 51: Beware the performance of string concatenation | |
Item 52: Refer to objects by their interfaces | |
Item 53: Prefer interfaces to reflection | |
Item 54: Use native methods judiciously | |
Item 55: Optimize judiciously | |
Item 56: Adhere to generally accepted naming conventions | |
9 Exceptions | |
Item 57: Use exceptions only for exceptional conditions | Miriam |
Item 58: Use checked exceptions for recoverable conditions and runtime exceptions for programming errors | |
Item 59: Avoid unnecessary use of checked exceptions | |
Item 60: Favor the use of standard exceptions | Ernesto |
Item 61: Throw exceptions appropriate to the abstraction | |
Item 62: Document all exceptions thrown by each method | |
Item 63: Include failure-capture information in detail messages | |
Item 64: Strive for failure atomicity | |
Item 65: Don't ignore exceptions | |
10 Concurrency | |
Item 66: Synchronize access to shared mutable data | Zusscell |
Item 67: Avoid excessive synchronization | |
Item 68: Prefer executors and tasks to threads | |
Item 69: Prefer concurrency utilities to wait and notify | |
Item 70: Document thread safety | Alex |
Item 71: Use lazy initialization judiciously | |
Item 72: Don't depend on the thread scheduler | |
Item 73: Avoid thread groups | |
11 Serialization | |
Item 74: Implement Serializable judiciously | Sier |
Item 75: Consider using a custom serialized form | |
Item 76: Write readObject methods defensively | |
Item 77: For instance control, prefer enum types to readResolve | |
Item 78: Consider serialization proxies instead of serialized instances |