gpt4 book ai didi

java - 如何正确实现Java匿名类的equals方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:19 26 4
gpt4 key购买 nike

this发布我建议使用接口(interface)和匿名类的解决方案。但是,需要执行一件事:hashCode。和 equals方法。

但是我发现很难实现equals对于实现接口(interface)的匿名类。在该示例中,接口(interface)为 Pair<L,R> , 和一个工厂方法 Pairs.makePair将为它返回一个匿名实现。假设我添加了一个 equals执行。用户可以实现自己的 Pair<L,R>不同的类 equals代码,因此调用 userobj.equals(makepairobj)将输入他们的代码,然后 makepairobj.equals(userobj)将输入我的代码。因为我无法控制他们的代码,所以很难确定 equals是对称的,这是良好实现所必需的。

我相信这个问题在其他情况下很常见,所以我想知道这个问题一般是如何解决的?

编辑:在典型的类中,执行 equals将检查参数类型以确保它与它自己的相同。这保证只会调用实现代码来比较对象。但是,匿名类没有名称,无法使用 instanceof 检查类型.我能做的是确保它是实现接口(interface)/类的实例。这不足以防止上述情况。

最佳答案

您可以使用 this.getClass()(使用 ==isAssignableFrom())来比较类型。

编辑

如:

public boolean equals(Object obj) {
if (getClass() == obj.getClass()) {
// do whatever
}
return false;
}

关于java - 如何正确实现Java匿名类的equals方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com