我希望我的EqualTester
泛型类调用其泛型参数的覆盖equals(...)
方法,但它似乎改为调用Object.equals
。这里是我的测试代码:在泛型类中使用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()方法(因为参数没有正确的类型)?
谢谢。
很高兴我能有所帮助。 如果你想要一些更高级的(和棘手的)信息,请尝试这个链接 - http://www.artima.com/lejava/articles/equality.html – Padmarag 2010-02-11 12:04:37
在投射之前也使用instanceof,那么你将不需要ClassCastException尝试块。 – Padmarag 2010-02-11 12:06:01
完成!谢谢... – 2010-02-11 12:44:20