加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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注释添加到方法中也很有用.

覆盖方法时,签名必须完全匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读