java - 我可以只使用关键字段来检查是否相等吗?我可以通过子类使用 equals 吗?

标签 java equals

我有一个带有一些字段的类 Player:

String name;
Point position;
Action action;

“姓名”字段是一个键,不能有 2 个玩家同名。所以在我看来,如果“名称”(可能忽略大小写)相同,它们就是相等的。那么我是只使用 String.equalsIgnoreCase(String) 还是同时检查其他字段?

1)是否应该在Player的equals方法中检查name字段?

2) 如果其他字段不相同,是否应该在 equals 方法中抛出错误?

3) 只为子类检查一个字段是否明智,因为即使在子类中名称相同,也表示相同的玩家,或者我应该选择另一种方法来比较它吗?示例:

class MovingPlayer extends Player{
    Point destination;

因此“名称”字段仍然是键(类似于子类间键)。

提前致谢,Tjen

最佳答案

  1. 您应该问自己这个问题——您的应用程序中是否可能存在两个具有相同名称属性和两个不同位置属性的对象?如果是这样,那么您应该实现 equals 方法以使用所有相关字段。

  2. 您不会在 equals 方法中抛出错误。你返回 true 或 false。

  3. 您的子类可以覆盖 equals 方法。在那个重写的方法中,您可以检查父类(super class)是否相等,只有当它们相等时,您才能继续进行额外的检查。

关于java - 我可以只使用关键字段来检查是否相等吗?我可以通过子类使用 equals 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820683/

相关文章:

java - Java中如何重写equals方法

java - 如何将系统属性传递给作为 Windows 服务运行的 Tomcat 7 中托管的 Web 应用程序?

java - 静态方法总是同时返回

java - 在 HashSet 中搜索时如何使用正则表达式

java - 我的 Java 书显示正在创建两个相同的对象,但它们未能通过 Object.equals() 调用。为什么?

Java equals()方法—— 'semantics of equals in subclasses'如何判断getClass和instanceof的使用

java - HTML 中的句子边界检测

java - 从 Fragment Force 启动 Activity 会关闭应用程序

java - 为什么这两个实例不是 `equal()` ?

javascript - JavaScript 运算符 === 是否可证明可传递?