/** * 論理的等価性(logical equality)が必要で、且つスーパークラスがそれに対応する * equals()メソッドを実装していない場合に、equals()メソッドを実装する。 * また、equals()メソッドを実装する際には、一般契約(Generic Contract)を守らなければ * ならない。この契約違反をした場合、JVM実装はどのような振る舞いをするか分からない。 * 一般契約一覧 * * * @see 実装参考 Effective Java 第3章項目7 equalsをオーバーライドする時は一般契約に従う * * @author s-okita */ package com.util; public class GenericContract { private int status; public GenericContract() { status = 0; } /** * reflexive contract * Symmetric contract */ public boolean equals(Object obj) { // 下記、Exceptionを生成しないように実装する事が、equals一般契約である。 // NullPointerException. // ClassCastException // 最初に行うのはnullチェックではなく、instanceof // これにより、NullPointerException, ClassCastExceptionを回避する。 //if (obj != null) { if (obj instanceof GenericContract) { if (this == obj) { // reflexive return true; } else { // Symmetric if (this.status == ((GenericContract)obj).getStatus()) { return true; } } } return false; } /** * @return */ public int getStatus() { return status; } /** * @param i */ public void setStatus(int i) { status = i; } }