Я бы хотел, чтобы мой класс EqualTester
вызывал переопределенный метод его общего параметра, но вместо этого он вызывает 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
Также используйте экземпляр перед литьем, тогда вам не понадобится попробовать ClassCastException блок. – Padmarag
Сделано! Спасибо ... –