4 ms·
I remember James Gosling saying, a long time ago, that the whole class should be either mutable or not so you do not need to tag some methods with const. The c
by _old_dude_ 3y ago
I remember James Gosling saying, a long time ago, that the whole class should be either mutable or not so you do not need to tag some methods with const.
The consequence is that you may define two classes, one non-mutable and one mutable like String/StringBuilder.
- layer8 3y agoIt means you have to triplicate each mutable class, because besides the immutable variant you also need the common interface (e.g. CharSequence), in order to pass mutable instances to read-only functions.
- paulddraper 3y agoNo, there are two classes -- mutable and immutable -- that both implement the immutable interface.
- layer8 3y agoYes, so three classes. I’m counting a Java interface as a class, because it is the same as a purely abstract class. In any case, three different named types. As a side note, I would say the interface is unmodifiable, not immutable, because references of the interface type may refer to mutable instances that can mutate while you use it through the interface. Immutable = doesn’t change state, unmodifiable = you can’t change it’s state via that reference (but it might change it’s state due to other concurrent code holding a mutable reference). This nomenclature comes from the “unmodifiable” collection wrappers in Java, which don’t make the underlying object immutable.
- taylorius 3y agoJava has many great qualities, but concision is not one of them.