Javaありがたや

Javaを簡潔・直感的に伝わるような記事書きたいです。

Commons Lang

equalsとhashCodeを簡単に実装。そしてシンプルにできるロジック

KAZ8514_wallcity_TP_V

equalsとhashメソッドは十数年前と比べると驚くほど簡単に実装できるようになりました。

その恩恵で手間だったロジックをシンプルにすることができます。

例えば、2つのBeanを比較するために各フィールドを比較する演算子を見たことがあると思います。

    if(tarBean.getName().equals(srcBean.getName()) &&
                tarBean.getAge() == srcBean.getAge() &&
                tarBean.getGender().equals(srcBean.getGender()))  {
      
      System.out.println("同じです。");
    }

Object.equalsをオーバーライドして実装すると簡略化されJavaっぽくなります。

続きを読む

JSON、HTML・XMLのエスケープはCommonsでやろう。StringEscapeUtils

images

JSONやHTMLのエスケープを自前メソッドでやりがちだが、エスケープ対象文字が抜けてしまっていたりします。

ひどい場合は、エスケープを理解しておらず全角に変換してしまったりしているアプリもあったりします。

CommonsのStringEscapeUtils使っていると、知らなくても勝手にエスケープしてくれてるので、テスト時に漏れてしまっていても、リリース後に「あの文字もエスケープ対象だったのかぁ」と呑気なことが言えるので素晴らしいライブラリ。

続きを読む

RuntimeExceptionに情報を追加できる「ContextedRuntimeException」

logo

エラー発生時の情報を追加するために、新しい例外クラスをつくりがち。

Commons LangにContextedRuntimeExceptionがある。

続きを読む

意外と手間なtoStringメソッド実装を簡単に。(ToStringBuiler)

logo

toStringメソッドは、『そのオブジェクトを文字で表現すると?』を返すメソッドでObject.toString()をオーバーライドする形で実装する。

『人が読める有益な情報を返す役割』なので実装方法に制限はない。 主にログ出力で使われるので、個々のクラスでしっかり実装しておくと、簡潔なコードでわかりやすいログを出力することができる。

と言っても「いちいちクラスにtoStringを実装してられねえよ!」という声もあるかと思う。 そんな手間なtoStringメソッドを「Commons Lang」のToStringBuilerで簡単に実装することができるので、是非活用したい。

続きを読む

Javaを簡単に計測する。(StopWatch)

BON_tokeiwomiru20150207155800_TP_V

Javaのプログラム速度を手っ取り早く計測するならCommons LangのStopWatchが便利です。

SQL実行時間や、コントローラの実行時間などを計測し、ログに出力しておくようにすると保守時に 必要なデータを解析しやすくなります。

Spring AOPなどで処理しておくこともお薦めしたい。

続きを読む

空文字、nullのチェックはcommonsでやろう

coffee20160715165504_TP_V

以下のような空文字チェック、nullチェックのソースをよく見かける。

    //よく見かける空チェック
    if(str == null || str.equals("")){
      System.out.println(str);
    }

ソース量が増えると『チェックに抜けはないか?』や『NullPointerExceptionが発生しないか?』などの確認も面倒くさい。

ユーティリティクラスに共通メソッドを作るのもいいが、ユーティリティクラスという名のもとに、よくわからないstaticメソッドの集合体になりがち。できれば、1つでも管理するメソッドを減らしたい気分になる。

JakartaのCommonsを使って、ユーティリティクラスのわかりにくいstaticメソッド管理を減らしていこう

続きを読む

CSVなどの文字列を作るのに便利な StringUtils#join

logo

CSVのような文字列を作るとき、以下のようなコードをよく見かける。

    //よく見かける'?','?','?','?'のつくり方
    StringBuilder sb = new StringBuilder();
    for(int i=0; i<5 ; i++){
      if(i!=0){
        sb.append(",");
      }
      sb.append("'?'");
    }

StringUtilsを使うと1行で記載できてしまう。

続きを読む