Java Enum Best Practice


Java Enum

  • An enumerated type is a type whose legal values consist of a fixed set of constants
  • An enum type is a subclass of java.Lang.Enum. An enum cannot extend any other class.
  • effectively static and final
  • enum implements Comparable and Serializable.
  • we can add instance fields/methods into enum
  • its valueOf(String) method translates a constant’s name into the constant itself.
  • Avoid use and return mutable field
    • static state is bad.

Item 35: Use instance fields instead of ordinals

  • Don’t rely on the ordinal or the order of elements in values
  • it’s not a contract, and may change
  • If needed, use an int field to declare the contract explicitly.
  • if the order matters, or should not change, add tests to guarantee it.
  • assertThat(EnumSet.allOf(MyEnum.class)).containsExactly(EnumA, EnumB, ...)

Use EnumSet

  • UseEnumSet.of(EnumA, EnumB) to create a set to store enum values.
    • It provides better performance compared with HashSet<MyEnum>
  • Use Set<MyEnum> as the interface, only use EnumSet when create the set.

Implement interface

Use enum for Singleton class

  • This enum will implement an interface, use the interface when needed.
  • We can mock the enum where ever the interface has been used.

Prefer equals() over ==

  • EqualsIncompatibleType can detect an equality test between objects with incompatible types always returns false.

Add abstract methods(constant-specific method implementations) to enum

  • each enum constant (including added in the future) will have to implement this method which guarantees that all cases are covered

Create an enum with Case Insensitive String

Misc Tips about Enum

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)