these can be made final and you can remove the non-null check from ```equals()``` and ```hashCode()```