我希望我的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