界: API Abuse
API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。
Object Model Violation: Just one of equals() and hashCode() Defined
Abstract
这个类仅替代了
equals()
和 hashCode()
中的一个。Explanation
Java 对象预期执行一系列与等式相关的不变式。其中的一个常量是相同的对象必须具有相同的哈希码。换句话说,如果
如果未能支持这一常量,当此类对象存储在一个集合中时,可能就会引发一些问题。如果将这个类的对象用作哈希表的关键值或是插入到一个 Map 或者 Set 中,那么相等的对象要具有相等的哈希码,这一点十分重要。
例 1:下面的类重写了
a.equals(b) == true
,那么 a.hashCode() == b.hashCode()
。 如果未能支持这一常量,当此类对象存储在一个集合中时,可能就会引发一些问题。如果将这个类的对象用作哈希表的关键值或是插入到一个 Map 或者 Set 中,那么相等的对象要具有相等的哈希码,这一点十分重要。
例 1:下面的类重写了
equals()
,但没有重写 hashCode()
。
public class halfway() {
public boolean equals(Object obj) {
...
}
}
References
desc.structural.java.object_model_violation_just_one_of_equals_hashcode_defined