p3c IdentityHashMap不应该强制key对象实现hashcode和equal

ddrv8njm  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(24)

规约原文

(五) 集合处理

  1. 【强制】关于hashCode和equals的处理,遵循如下规则: 1) 只要重写equals,就必须重写hashCode。 2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 3) 如果自定义对象做为Map的键,那么必须重写hashCode和equals。 说明:String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。

问题描述

IdentityHashMap使用使用System.identityHashCode计算对象的hash,并且在比较key时不使用equal,因此该条规约不应该涉及IdentityHashMap, 相关插件在检查到map对象是IdentityHashMap时应该屏蔽相关告警

修改建议

规约以及相关插件针对Identityhashmap特殊处理

x6492ojm

x6492ojm1#

IdentityHashMap类不完全遵循Map的约定却实现了Map接口……这属于java早期的乱拉屎行为之一。
唉。
完全不建议使用这个类。
也不值得为了这玩意专门做特殊处理。
并且也没有任何手段能做这种特殊处理。

相关问题