我想要我的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() 方法(因为参数没有正确的类型)?
Thanks.
您需要编码为public boolean equals(Object k)
,然后投射到k
.
现在你只是重载 equals 方法.
添加也很有用@Override
方法的注释。
重写时方法签名必须完全匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)