1. You still need custom deserialization for singletons so that you always get the same object back.

2. As Josh Bloch explains in Effective Java, you still need to customize serialization for immutable objects as I described above if they have consistency conditions on their members. The problem is that you can serialize an instance, tweak the bytes representing numbers, then deserialize. Because default deserialization bypasses the constructor (easily seen by putting a print in the constructor itself), it bypasses any consistency checks in the constructor.

I think this second point is why I was confused about the base case. Thanks again for pointing out my error.

above if you want to defend against inconsistent instances of immutable classes. The problem is that someone can define a sequence