命名の習慣
例 | 説明 | |
---|---|---|
クラス名 | MyClass | 先頭大文字で名詞で名付ける |
メソッド名 | setXxxx, getXxxx | 先頭小文字で動詞を使う |
フィールド名 | pageRange | 先頭小文字で名詞で名付ける |
定数名 | MY_SUCCESS | 全部大文字かつ単語の区切りは_ |
ループ
ループカウンタが必要な特殊な理由がない場合は拡張forループを使うべき
∵総称型(generics)と組み合わせることで、キャストによる失敗を気にすることなく、安全に処理を記述できる。
総称型
コレクションから値を取り出す時はキャストする必要がある。でもキャストはコンパイラではチェックできないからエラーの元になる...
総称型を使うとコンパイラに方の情報を伝えることが出来る。
→ キャストによる実行時の例外を大きく抑えることが出来る。
※ コレクション : ArrayListのような大きさが決まっていない配列のようなもの。
String text = "gihyo"; List list = new ArrayList(); list.add(text); String result = (String) list.get(0); // キャスト
↓上記のような処理は、総称型を使うことで次のように書けます。
String text = "gihyo"; List<String> list = new ArrayList<String>(); list.add(text); // String以外はaddできない String result = list.get(0); // キャストは不要
つまり総称型使うとキャストが不要!String 以外のオブジェクトを add しようとしたときコンパイラがエラーを出す! →安全に型を扱える!
Javaの定数は列挙型(enum)を使うべき
従来の static final を使った定数では、次のような問題を含んだコードを記述できた。
private static final int SUCCESS = 0; private static final int FAIL = 1; ... hoge.finish(3); // 3の定数は定義してないけど,呼び出しはエラーにならない
↓列挙型なら..
public enum FinishType { SUCCESS, FAIL } // 列挙型の定義 ... そしてメソッドの定義では、引数に先ほど定義し た列挙型を受け取るようにします。 public void finish(FinishType type) { // 処理内容 } hoge.finish(FinishType.SUCCESS); //メソッドを呼び出す側では、先ほど定義した列挙型を渡します。
このように列挙を使用すると、finish( ) メソッドの引数がFinishType型と明確に指定している。
→ FinishType型以外はコンパイラがエラーを出す!
→ int 型定数のときにあり得た、定数で定義していない int 値を渡すといったバグが発生しない。