9
Effective Java 輪読会 2013/02/12 開発部 田中

Effective Java 輪読会 第7章 項目41-42

Embed Size (px)

Citation preview

Page 1: Effective Java 輪読会 第7章 項目41-42

Effective Java 輪読会

2013/02/12

開発部 田中

Page 2: Effective Java 輪読会 第7章 項目41-42

項目41

オーバーロードを注意して使用する

Page 3: Effective Java 輪読会 第7章 項目41-42

どのメソッドが呼び出されるか

• オーバーロード(またはオーバーライド)したメソッドのうちどれが呼び出されるか

o オーバーロード:コンパイル時の型を元に静的に判断する

o オーバーライド:実行時の型を元に動的に判断する

Page 4: Effective Java 輪読会 第7章 項目41-42

型によるオーバーロードは避ける

• 型情報をメソッド名に持たせる o ex. writeBoolean, writeInt

• コンストラクタの場合、スタティックファクトリーメソッドを使う

• パラメーターの組み合わせによるオーバーロードなら困惑しない

Page 5: Effective Java 輪読会 第7章 項目41-42

自動ボクシングに関する注意

• プリミティブ型と参照型はもはや根本的に異なる型ではない o ex. SetのremoveとListのremoveのそれぞれにintの値を渡した時の挙動を比較する

public E remove(int index)

public boolean remove(Object o)

Page 6: Effective Java 輪読会 第7章 項目41-42

まとめ

• 同じ数のパラメーターを持つ複数のシグニチャでメソッドをオーバーロードすべきではない

• 同じパラメーターを渡されたら、複数のシグネチャでも同じ振る舞いを保証するべき

Page 7: Effective Java 輪読会 第7章 項目41-42

項目42

可変長引数を注意して使用する

Page 8: Effective Java 輪読会 第7章 項目41-42

1個以上の引数を必要とするメソッド

• 1つの引数 + 可変長引数 o ex. static int min(int firstArg, int… remainingArgs)

Page 9: Effective Java 輪読会 第7章 項目41-42

配列 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 教訓:可変長の値それぞれに対して操作を行う場合に可変長引数を使う