``++transient++`` fields are ignored by Java's automatic serizalization mechanisms, which means that when a object is deserialized, those fields will be set to their default values. ``++transient++`` fields that are referenced in multiple places in a class seem to play a significant role in that class. Allowing such significant fields to be left in a default state after deserialization may not be the best course, so they should probably be set in either a ``++readObject()++`` or ``++readResolve()++`` method. == Noncompliant Code Example Using the default threshold of 3: ---- class Fruit implements Serializable { private transient Seed seed; public Fruit (Seed seed) { this.seed = seed; // 1st set } public void setSeed (Seed seed) { this.seed = seed; // 2nd set } public Seed getSeed() { return seed; // not counted; read, not write. } public void sprout () { this.seed = new GerminatedSeed(); // Noncompliant; 3rd write //... } } ---- == Compliant Solution ---- class Fruit implements Serializable { private transient Seed seed; public Fruit (Seed seed) { this.seed = seed; // 1st reference } public void setSeed (Seed seed) this.seed = seed; // 2nd reference } public Seed getSeed() { return seed; // not counted; read, not write. } public void sprout () { this.seed = new GerminatedSeed(); // Noncompliant; 3rd write //... } protected Object readResolve() throws ObjectStreamException { // ... } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::message.adoc[] include::parameters.adoc[] endif::env-github,rspecator-view[]