我问了一个关于 findbugs 的相关问题,但让我们问一个更一般的问题。
假设我正在使用一种可以实现多态的面向对象语言。
假设语言支持静态类型检查(例如,Java、C++)
假设该语言不允许参数变化(例如,Java,再次......)
如果我要重写将 Object 作为参数的相等操作,在参数与调用 equals 的 LHS 不同的类型或子类型的情况下,我应该怎么做?
选项 1 - 返回 false,因为对象显然不等于
选项 2 - 抛出一个转换异常,因为如果语言实际上支持方差(这本来是可取的),这将在编译时作为错误被捕获;因此,在运行时检测此错误是有意义的,因为发送另一种类型的情况应该是非法的。