gpt4 book ai didi

java - 在泛型类中使用 equals

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:45 24 4
gpt4 key购买 nike

我希望我的 EqualTester 泛型类调用其泛型参数的重写 equals(...) 方法,但它似乎调用了 Object .equals 代替。这是我的测试代码:

import junit.framework.TestCase;

public class EqualityInsideGenerics extends TestCase {

public static class EqualTester<V> {
public boolean check(V v1, V v2) {
return v1.equals(v2);
}
}

public static class K {
private int i;
private Object o;

public K(Object o, int i) {
this.o = o;
this.i = i;
}
public boolean equals(K k) {
return ((k.o != null && k.o.equals(o)) || o == null) && (k.i == i);
}
};

public void testEqual() {
K k1 = new K(null, 0);
K k2 = new K(null, 0);
assertTrue(k1.equals(k2)); // This one ok
EqualTester<K> tester = new EqualTester<K>();
assertTrue(tester.check(k1, k2)); // This one KO!
}
}

您能否解释一下为什么这不起作用,以及如何更改我的 EqualTester 类?

是不是因为K实际上没有覆盖Object.equals()方法(因为参数没有正确的类型)?

谢谢。

最佳答案

您需要编码为public boolean equals(Object k),然后转换为k

现在您只是重载了 equals 方法

给方法添加@Override注解也很有用。

覆盖方法签名时必须完全匹配。

关于java - 在泛型类中使用 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2244086/

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