ケアレスミスを無くす章
1.2. 配列を返すメソッド
『目的』
配列を返すメソッドを工夫してミスを減らしましょう。
『Before』
配列を返すメソッドで、返り値としてnullを返す実装はミスを誘発することになります。 よくありません。 これは、nullを返す例です。
public class Before { // 文字列リスト private List<String> stringList; /** * 文字列リストを文字列配列に変換して返す。 */ private String[] getStringList() { // リストの中身がないから null を返す if (stringList.size() == 0) { return null; } // リストの中身があるから配列に変換して返す return stringList.toArray(new String[stringList.size()]); } /** * 文字列リストに"Hello"を含むかどうかを返す。 */ public boolean isContainsHello() { String[] list = getStringList(); if (list != null) { if (Arrays.asList(list).contains("Hello")) { return true; } } return false; } }
getStringList()メソッドは、リストのサイズが0である場合にnullを返しますが、呼び出し側(isContainsHello)ではnullチェック用の条件文が必要になります。 うっかりnullチェックを忘れてしまい、NullPointerException例外を引き起こしてしまうかもしれません。
『After』
そこで、nullを返す代わりにサイズ0の配列を返すように書き換えてみます。
public class After { // 文字列リスト private List<String> stringList; /** * 文字列リストを文字列配列に変換して返す。 */ private String[] getStringList() { // リストの中身が有ろうが無かろうが配列に変換して返す return stringList.toArray(new String[stringList.size()]); } /** * 文字列リストに"Hello"を含むかどうかを返す。 */ public boolean isContainsHello() { String[] list = getStringList(); if (Arrays.asList(list).contains("Hello")) { return true; } return false; } }
呼び出し側でのnullチェック用の条件文が不要になりましたね。 ということは、NullPointerException例外が発生する危険もなくなりました。 また、配列を返すメソッド自身も簡潔になりました。
『まとめ』
配列を返すメソッドは、nullを返すことはせずにサイズ0の配列を返しましょう。 それによって、コードが簡潔になりますし、NullPointerException例外が発生しなくなります。
なお、nullを返すことによる利点は些細な点においてはあるのですが、ミスを防ぐことの方が遙かに重要です。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針