为何相同内容创建的org.apache.hc.core5.http.Header实例不相等?
为什么BasicHeader的断言会失败?
问题的核心原因很直接:
- Apache HC Core5库中的
BasicHeader类没有重写Object的equals()和hashCode()方法。默认的equals()只比较对象引用,而非头部的名称、值、敏感标记这些业务属性;默认的hashCode()则基于对象内存地址生成,每个新实例的哈希码都不同。 - 所以哪怕你创建的两个
BasicHeader参数完全一致,它们也是两个独立的对象,Assertions.assertEquals()会因为引用不相等而失败,哈希码自然也不一样。
解决方法
如果需要正确对比BasicHeader的内容,有两种可行方式:
- 手动逐一对比属性
BasicHeader h1 = new BasicHeader("name", "value", true); BasicHeader h2 = new BasicHeader("name", "value", true); Assertions.assertEquals(h1.getName(), h2.getName()); Assertions.assertEquals(h1.getValue(), h2.getValue()); Assertions.assertEquals(h1.isSensitive(), h2.isSensitive());
- 使用库内置的
HeaderComparator工具类
import org.apache.hc.core5.http.HeaderComparator; BasicHeader h1 = new BasicHeader("name", "value", true); BasicHeader h2 = new BasicHeader("name", "value", true); Assertions.assertTrue(HeaderComparator.INSTANCE.compare(h1, h2) == 0);
内容的提问来源于stack exchange,提问作者Martin WasGehtSieDasAn
相关产品推荐
相关产品推荐

