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

Effective Java (2nd Edition) - Joshua Bloch

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]

Twitter Mentions