== Why is this an issue? Developers may want to add some logic to handle deserialized objects before they are returned to the caller. This can be achieved by implementing the `readResolve` method. Non-final classes implementing `readResolve` should not set its visibility to `private` as this would make it unavailable to child classes. Instead, mark `readResolve` as `protected`, allowing it to be inherited. === Code examples ==== Noncompliant code example [source,java,diff-id=1,diff-type=noncompliant] ---- public class Fruit implements Serializable { private static final long serialVersionUID = 1; private Object readResolve() throws ObjectStreamException // Noncompliant, `readResolve` should not be private {...} //... } public class Raspberry extends Fruit implements Serializable { // This class has no access to the parent's "readResolve" method //... } ---- ==== Compliant solution [source,java,diff-id=1,diff-type=compliant] ---- public class Fruit implements Serializable { private static final long serialVersionUID = 1; protected Object readResolve() throws ObjectStreamException // Compliant, `readResolve` is protected {...} //... } public class Raspberry extends Fruit implements Serializable { // This class has access to the parent's "readResolve" //... } ---- == Resources * https://docs.oracle.com/javase/8/docs/platform/serialization/spec/input.html#a5903[Java Object Serialization Specification - Object Input Classes] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Make this class "private" or elevate the visibility of "readResolve". endif::env-github,rspecator-view[]