我问了一个关于 findbugs 的相关问题,但让我们问一个更一般的问题。

假设我正在使用一种可以实现多态的面向对象语言。

假设该语言支持静态类型检查(例如,Java、C++)

假设语言不允许参数变化(例如,Java,再次......)

如果我要覆盖将 Object 作为参数的相等操作,在参数与调用 equals 的 LHS 不同的类型或子类型的情况下,我该怎么办?

选项 1 - 返回 false,因为对象显然不相等

选项 2 - 抛出一个强制转换异常,因为如果语言实际上支持变化(这本来是可取的),这将在编译时作为错误被捕获;因此,在运行时检测此错误是有意义的,因为发送另一种类型的情况应该是非法的。

最佳答案

我投票支持选项 1。两个不同类型的对象可能相等——例如,int 和 double,如果是一流的对象,可以有效地相互转换并且在数学上具有可比性。此外,您可能希望将不同的子类在某些方面视为相等,但两者都不能强制转换为另一个(尽管它们可能来自同一个父类)。

关于language-agnostic - 投票 : Correct behavior of equality when passed object does not match LHS type?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/364478/

10-11 05:46