AFAICS, our equals() implementation is also wrong.
It shouldn't be an issue in practice as the parameterTypes should be identical but it definitely breaks the contract.