How to Choose Right Types in Java


  • Effective Java Item 61: Prefer primitive types to boxed primitives
    • avoid null check and potentially NullPointerException
    • Avoid auto-box and unbox
  • Prefer Collection over Array
  • Avoid use pair, use custom named class instead.

Avoid using primitive data types to represent domain ideas: Primitive Obsession

  • Avoid using primitives to represent time, use java.time types: Instant or Duration
    • Avoid use Joda in new code.
  • Item 62: Avoid strings where other types are more appropriate
    • Strings are poor substitutes for enum types, aggregate types, for capabilities
  • timeoutInSeconds > Duration

Prefer Immutable Types

  • Choose an Immutable type unless specific need for mutation
  • Use immutable type in declaration: immutability is semantics, not an implementation detail.

How General/Specific in parameter or return types?

  • For parameters, use the most general type
  • For return types, use the most specific type

Collections

  • Use ArrayList instead of LinkedList in most cases.
    • LinkedList uses much more space.
  • Use set-like type unless duplicate elements are possible
  • Use a bi-map-like type unless values are not unique
  • Only use sorted-like types if the data must be sorted as they come with additional runtime overhead.

Avoid semantic-free types

  • The built-in functions: (Supplier, Consumer, BiFunction etc) are essentially semantic-free.
  • Create custom function types with meaningful names if needed.

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)