当前位置: 首页 > 知识库问答 >
问题:

Override equals用于对照类类型或基元int[duplicate]进行检查

满昊然
2023-03-14

我试图找到一种方法,使我的类的equals方法适用于类类型或原始int,但我所使用的方法有些不对劲:

class MyClass {
    int myID;
    ....
    [other class variables/methods]
    ....

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof MyClass)) {
            // False if neither an int nor a myClass
            if (!(obj.getClass().equals(int.class))) {
                return false
            }
            // If int, check against myID
            return ((int) obj).myID == myID);
        }
        // If myClass check against that object's myID
        return ((MyClass) obj).myID == myID);
    }
}
ArrayList<MyClass> myClassList = new ArrayList<MyClass>();

int someID = 5;
MyClass myClass = new MyClass([initialize with myID = 5]);
MyClass otherClass = new MyClass(myClass);

myClassList.add(myClass);

myClassList.contains(otherClass); // returns true
myClassList.contains(someID); // returns true

我以前从来没有遇到过这种情况,所以我不知道什么是最干净的方法。

共有1个答案

陆城
2023-03-14

即使您能够找到一种使equals方法起作用的方法,您也会通过破坏equals方法的契约为自己埋下麻烦。

Java8流怎么样?

static boolean listContainsId(List<MyClass> list, int id) {
    return list.stream().anyMatch(mc -> mc.myID == id);
}
 类似资料:
  • 问题内容: 有时需要检查Python中的参数。例如,我有一个函数可以接受网络中其他节点的地址作为原始字符串地址,也可以接受封装其他节点信息的类Node。 我使用type()函数,如下所示: 这是这样做的好方法吗? 更新1: Python 3具有函数参数的注释。可以使用以下工具将其用于类型检查:http ://mypy-lang.org/ 问题答案: 使用。样品:

  • 我一直在尝试移植一段JavaScript代码,现在,我唯一尚未开始工作的部分出现了此错误:无法在原始类型int上调用padLz(int)。原始JavaScript代码在下面,同样是我的移植版本,我还无法工作的部分还突出显示。 错误: 无法在基元类型 int 上调用 padLz(int) 原件 移植版本 string grid ref = let pair ' ' e . padlz(digits/

  • 我有疑问。我写了一个流类型检查器来检查我的减速器。有一个错误,你能给我解释一下错误的原因吗。这是我的密码。 这是错误。 错误------------------------------------------------------------------------------------------------------------------------------------------

  • 基准测试在卡钳库下运行。 测试结果 Int 2.365ns 长2.436 ns 短8.156ns > 为什么short原语明显比int或long慢?我希望int原语类型在32bit VM上是最快的,并且长和短在时间上是相等的,或者短的更快。 Android手机上也是这样吗?众所周知,Android手机通常运行在32bit环境下,现在越来越多的手机开始配备64bit处理器。

  • 我使用下面的代码来查找反射中的类成员是原语和某个对象,我的问题是有一种方法来识别字段是否是类型原语、对象、类引用,因为我想根据类型调用特定的方法。例如,如果field是原语,则调用HandleErimition,如果field是其他类型引用(在下面的示例中是SalesOrderItemPK,PrimaryKey;),则调用方法handleClassReferance等 只是为了理解,我需要获得类,

  • 问题内容: 我有以下我想用流程注释的内容: 我知道该怎么做了类型检查,这样的类型的(如上图所示),但我怎么能型检查其属性呢? 已经尝试过: 但是随后流程只是抱怨而从未使用过。 问题答案: 因此,您要发送类型为的道具,该道具必须具有属性和? 如果没有编写执行此检查的自定义函数,则无法实现。为此,您需要这样声明: 这是官方文档所说的: 您还可以指定一个自定义验证器。如果验证失败,它将返回一个Error