btw, if we adopt this, you have to do the same for equals()