[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: the benefits of immutability
Vadim Nasardinov wrote:
> class Subclass extends Superclass {
> private int m_num;
>
> public Subclass(String str, int num) {
> super(str);
> m_num = num;
> }
>
> public boolean equals(Object obj) {
> // try and replace this with an implementation that takes
> // m_num into account
> return super.equals(obj);
> }
> }
What's the problem with this?
public boolean equals(Object obj) {
if (!(obj instanceof Subclass)) return false;
Subclass that = (Subclass)obj;
return super.equals(that) && (this.m_num == that.m_num);
}
I think the main design problem in Java is that immutability is just a
convention, but inappropriate language constructs are used to enforce
that convention. Either you completely forget about enforcing
immutability and rely on intelligent programmers to do it right, or
invent a language construct that explicitly says what you want. In Java,
one could have added a class modifier "immutable" and, for example,
require that all fields in an immutable class are final.
(I suspect there are some nasty corner cases, but it should be doable...)
Pascal
--
Pascal Costanza University of Bonn
mailto:costanza@web.de Institute of Computer Science III
http://www.pascalcostanza.de Ro"merstr. 164, D-53117 Bonn (Germany)