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.
Enforce the Singleton property with a private constructor or an enum type
- Create a public static final INSTANCE variable and privatize constructor
- Same as 1 but privatize variable and expose access with provide factory method
- Single element Enums
- First two approaches are open to Serialization attacks (deserializing creates new instance)
- To protect from those declare the fields transient + provide
- 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