java – 在泛型类中使用equals
发布时间:2020-12-15 05:04:16 所属栏目:Java 来源:网络整理
导读:我希望我的EqualTester泛型类调用其泛型参数的重写equals(…)方法,但它似乎调用了Object.equals.这是我的测试代码: import junit.framework.TestCase;public class EqualityInsideGenerics extends TestCase { public static class EqualTesterV { public b
我希望我的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()方法(因为参数没有正确的类型)? 谢谢. 解决方法
您需要编码为公共布尔等于(对象k),然后转换为k.
现在你只是重载equals方法. 将@Override注释添加到方法中也很有用. 覆盖方法时,签名必须完全匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |