Upload
appresso-engineering-team
View
267
Download
2
Embed Size (px)
Citation preview
Effective Java 輪読会
2013/02/12
開発部 田中
項目41
オーバーロードを注意して使用する
どのメソッドが呼び出されるか
• オーバーロード(またはオーバーライド)したメソッドのうちどれが呼び出されるか
o オーバーロード:コンパイル時の型を元に静的に判断する
o オーバーライド:実行時の型を元に動的に判断する
型によるオーバーロードは避ける
• 型情報をメソッド名に持たせる o ex. writeBoolean, writeInt
• コンストラクタの場合、スタティックファクトリーメソッドを使う
• パラメーターの組み合わせによるオーバーロードなら困惑しない
自動ボクシングに関する注意
• プリミティブ型と参照型はもはや根本的に異なる型ではない o ex. SetのremoveとListのremoveのそれぞれにintの値を渡した時の挙動を比較する
public E remove(int index)
public boolean remove(Object o)
まとめ
• 同じ数のパラメーターを持つ複数のシグニチャでメソッドをオーバーロードすべきではない
• 同じパラメーターを渡されたら、複数のシグネチャでも同じ振る舞いを保証するべき
項目42
可変長引数を注意して使用する
1個以上の引数を必要とするメソッド
• 1つの引数 + 可変長引数 o ex. static int min(int firstArg, int… remainingArgs)
配列 or 可変長引数
• Arrays.asListを例に o シグニチャ:static <T> List<T> asList(T... a);
Arrays.asList(“to”, “too”, “two”);
Arrays.asList(new String[] { “to”, “too”, “two” });
o asListメソッドは配列を受け取ったとき、List<int[]>
インスタンスを返す。→ printlnしても中身が表示されない
o 教訓:可変長の値それぞれに対して操作を行う場合に可変長引数を使う