Javaに組み込まれている契約チェックはありますか?ハッシュコードとequals関数の間の契約では?Javaの契約チェック - 内蔵ですか?例えば。ハッシュコード/等価
この質問では、例としてhashcode/equalsコントラクトを使用しますが、私は一般的な契約チェックに興味があります。私が等しくなる複数の場所で読んだことがあるし、ハッシュコードは、Javaでの「契約」を満たしている必要があります。
- 等号
- 等しいオブジェクトをequivalence relationの3つのルールに従わなければならないし、また、繰り返しの呼び出しに一致していなければならない同じハッシュコードを意味します
私は条件を理解しており、私には意味があります。しかし、私は疑問に思っています。これは単なる契約書ですか?開発者がバグのコードを書かないように強く指針していますか?それとも、Javaによってコンパイル時または実行時の例外として捕捉されるものでしょうか?
コンパイル時または実行時の例外としてJavaで捕捉されることはありません。あなたは責任を負いません。あなたは、これらの契約をチェックする単体テストを作成します。 (コードを書いている)contに従うラクト。 – nbokmans
同じであれば、同じハッシュコードを意味するわけではありませんが、あなたはいくつかの奇妙な動作を得ることができます。例えば。同じオブジェクトをハッシュマップ内の異なるバケットにマップすることができます。 –
ありがとうございました - それは私が思ったものです。だから、基本的には、Javaが本当に恐ろしいとバグになるコードを書かないようにJavaの強力なガイドラインです...しかし、理論的には、契約に違反するプログラムを書くことができ、何年もの間、明らかになった。 –