...
This compliant solution uses an enum and adds a custom readResolve() method that replaces the deserialized instance with a reference to the appropriate singleton from the current execution. More complicated cases may also require custom writeObject() or readObject() methods in addition to (or instead of) the custom readResolve() method.
| Code Block | ||
|---|---|---|
| ||
Classpublicpublic enum NumberEnumSingletonClass extends NumberNumberEnum { INSTANCE; NumberData number = new NumberData(); More information on correctly handling singleton classes is available in therule MSC07-J, “Prevent multiple instantiations of singleton objects.†class SingletonClass extends Number { Exception { // ... private protected final Object readResolve() throws NotSerializableException { return INSTANCE; } } public class NumberData extends Number { // ... } |
This compliant solution uses composition over extension of the Number class. More information on singleton classes is available in rule MSC07-J. Prevent multiple instantiations of singleton objects.
Noncompliant Code Example
...
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3ba4f7d1b881126b-6689b62c-4a6947c3-8020bc55-0259564c74d95fb862fa3085"><ac:plain-text-body><![CDATA[ | [[API 2006 | AA. Bibliography#API 06]] | Class | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b58e88f758dc40c9-3752459c-49394f60-ab6795ad-2f858f58688a5e54074cb1a6"><ac:plain-text-body><![CDATA[ | [[Bloch 2008 | AA. Bibliography#Bloch 08]] | Item 75, Consider using a custom serialized form | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3eed61605df9b254-5e34862a-4c05405d-a725a5d7-6a2da3618f260424ed7510ee"><ac:plain-text-body><![CDATA[ | [[Greanier 2000 | AA. Bibliography#Greanier 00]] |
| ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="cfd917bd86d2fa03-78f3e49a-44dd46b8-b7338d79-9c9368647aeb6b9b5631a806"><ac:plain-text-body><![CDATA[ | [[Harold 1999 | AA. Bibliography#Harold 99]] | Chapter 11, Object Serialization, Validation | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="6b35f7e86be24c42-0e98dd40-426946d4-92c68bd0-eb458b6205ed9a8037a8fe41"><ac:plain-text-body><![CDATA[ | [[Hawtin 2008 | AA. Bibliography#Hawtin 08]] | Antipattern 8. Believing deserialisation is unrelated to construction | ]]></ac:plain-text-body></ac:structured-macro> |
...