In this mini Fragment, we introduce Joshua’s third Item: Enforce the Singleton property with a private constructor or an enum type.
Stay tuned for more items from our “Effective Java for Android developers” Fragment series.
Show Notes:
Enforce the Singleton property with a private constructor or an enum type
Approaches
- Create a public static final INSTANCE variable and privatize constructor
- Same as 1 but privatize variable and expose access with provide factory method
getInstance
- Single element Enums
Considerations
- First two approaches are open to Serialization attacks (deserializing creates new instance)
- To protect from those declare the fields transient + provide
readResolve
method - Enums are concise, provide free serialization and ironclad Singleton guarantees and are functionally equivalent to first approach
Supplemental reading (for the diligent ones that follow shownotes)
- Dianne Hackborn regretting exposing the base Application class
- DH again saying Application is a Singleton with crappier semantics
- Elvis sightings
Contact us:
- @fragmentedcast [twitter.com]
- @donnfelker [twitter.com]
- @kaushikgopal [twitter.com]