| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
64 バイト追加 、 2020年2月15日 (土) 08:02
編集の要約なし
==Effective Java==
[[Java]][[http://www.amazon.co.jp/gp/product/489471499X?ie=UTF8&tag=typea09-22&linkCode=as2&camp=247&creative=7399&creativeASIN=489471499X Effective Java 第2版]] から、メモ
{{amazon|489471499X}}
|}
<&lt;blockquote>&gt;抽象化の恩恵をあきらめずに、インスタンス化可能なクラスを拡張して、equals 契約を守ったまま、値要素を追加する方法はない。<&lt;/blockquote>&gt;
===equals をオーバーライドする時は、常に hashCode をオーバーライドする===
====hashCode の実装例====
##boolean なら (f?1:0)
##byte,char,short,int なら、(int)f
##long なら、(int)(f^(f>>&gt;&gt;32))
##float なら、Float.floatToIntBits(f)
##double なら、Double.doubleToLongBits(f) を行い、long と同様の変換
}
<&lt;blockquote>&gt;Eclipse でオブジェクトのコンテキストメニュー - Source - Generate hashCode() and equals() で自動生成出来る<&lt;/blockquote>&gt;
===toString()を常にオーバーライドする===
*優れたtoString()を実装するとクラスが使いやすくなる
===clone を注意してオーバーライドする===
<&lt;blockquote>&gt;インターフェースは Cloneable を拡張すべきではなく、継承されるように設計されたクラスでは、Cloneable を実装すべきでない<&lt;/blockquote>&gt;
*コピーを行う代替手段を提供するか、コピーしないほうがよい
*上手い方法は、コピーコンストラクタか、コピーファクトリーを提供すること。
=====equals メソッドの一般契約に似た契約=====
*sgn(x.compareTo(y) == -sgn(y.compareTo(x)) であること
*x.compareTo(y) > &gt; 0 && y.compareTo(z) は、x.compareTo(z) > &gt; 0 であること
*x.compareTo(y)== 0 が、sgn(x.compareTo(z) == sgn(y.comareTo(z)) であること
*x.compareTo(y) なら、x.equals(y) であることを推奨
<&lt;blockquote>&gt;equals と同様、オブジェクト指向の抽象化による恩恵をあきらめずに、インスタンス化可能クラスを拡張して、compareTo 契約を守ったまま、値要素を追加する方法はない。<&lt;/blockquote>&gt;
==クラスとインターフェース==
===クラスとメンバーへのアクセス可能性を最小限にする===

案内メニュー