便利なコードパーツ集!

やまろうのプログラミングTips

Java

commons.lang.builderでequals(),compareTo(),toString(),hashCode()を実装

投稿日:

2005/02

ValueObject(値を格納するオブジェクト)でフィールドの数が多かったりすると
equals(),compareTo(),toString()なんかのメソッドを実装するのって
めんどくさいですよね?これらをリフレクションで自動的に実装してくれる
機能がcommons.lang.builderパッケージです。これらを呼び出すコードを共通化
したスーパークラスを作りました。

じゃあソース見てちょーだい

スポンサーリンク



[実行結果]

obj.toString()=jp.gr.java_conf.yamarou.util.UserVO@483604de[bloodType=B,name=tanaka]obj.equals(obj2)=true
obj.compareTo(obj2)=0
super.hashCode()=1211499742★obj.hashCode()=-881004887
super.hashCode()=931906782★obj2.hashCode()=-881004887
super.hashCode()=1211499742★((Object) obj).hashCode()=-881004887
super.hashCode()=931906782★((Object) obj2).hashCode()=-881004887

obj.equals(obj2)=false
obj.compareTo(obj2)=1
super.hashCode()=1211499742★obj.hashCode()=-881004887
super.hashCode()=931906782★obj2.hashCode()=-881004924
super.hashCode()=1211499742★((Object) obj).hashCode()=-881004887
super.hashCode()=931906782★((Object) obj2).hashCode()=-881004924

obj.compareTo(obj2)=-13

とちゃんと結果を返します。でもhashCodeはjava.lang.Object#hashCodeは
同じ値を持ってても違うインスタンスの場合、違うhashCodeを返すけど
HashCodeBuilder.reflectionHashCode(this)だと同じhashCodeを返すから
どっちがいいんだかって感じですねぇ。あとcompareToもどういう順序で
比較していってるかがよく分からないから自分で実装したほうがいいかも
しれないですね。toString()とequals()は使えそうですね♪

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2020 AllRights Reserved Powered by AFFINGER4.