gpt4 book ai didi

java - 在 Java 中为类实现两种 Equals 方法

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

public class Foo{
private final int A;
private final int B;
public boolean equals(Object o){
//type check omitted
return A==o.A && B==o.B;
}

}

我想要另一个.equals()这样的方法

public boolean equals(Object o){
return A==o.A;
}

首先使用 A、B 字段创建 Foo 对象,然后我想将它们发送到 Set<E>使用第二个 equals() 方法只比较字段 A

我知道我可以创建只有 A 字段的新对象,但开销会很大。有什么建议吗?

最佳答案

使用组合,您可以创建一个 FooWrapper提供 equals 自定义实现的类并将其添加到集合中:

public class FooWrapper {
public final Foo foo; //constructor omitted

public boolean equals(Object other) {
//type check omitted here too
return foo.A == other.foo.A;
}

//hashCode omitted, but you need that too
}

不幸的是,Java Collections API 无法告诉集合使用自定义 equals除上述方法或子类化和覆盖之外的计算 equals() .

编辑:

令我印象深刻的是,您也许可以使用 Map<Integer, Foo>相反,使用 foo.A作为键和 foo作为值(并因此将其限制为唯一值 A )。不过,如果没有更多上下文,我无法告诉您这是否合适。

关于java - 在 Java 中为类实现两种 Equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378232/

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