pcj
pcj copied to clipboard
Mutable classes should not inherit from Immutable ones
A mutable class that inherits from an immutable one does not respect the Liskov Substitution Principle, a.k.a. the L in SOLID. An immutable object and its responses to getters can be cached indefinitely whereas a mutable object does not allow this.
For example, AbstractPersistentArray inherits from AbstractPersistentImmutableArray, adding setters that render what should be immutable, per the contract of AbstractPersistentImmutableArray.
This may just be a naming issue. If a suitable replacement for the term Immutable were found that doesn't imply a specific contract, for instance Readable.