yohjizzz's Blog

I'm a Programmer.

変換時のコピー方法。

ML(Seasar-user)で投稿をみっけました。

S2Dxoを用いた場合の日付の変換(コピー)に関してですが、
java.sql.Date -> java.util.Date 等、異なるクラスへの変換の場合は一度ミリ秒に変換してから変換先のオブジェクトを新たに作成する一方、
java.sql.Date -> java.sql.Date 等、同じクラスへの変換の場合は元のオブジェクトをそのまま戻しています。
(org.seasar.extension.dxo.converter.impl.SqlDateConverterクラス等のソースより)

この結果、同じjava.sql.Date型を有する2つのクラスでオブジェクトの変換(コピー)を行った場合、片方での値の書き換えが他方にも影響してしまいます。

(Seasar-user:11287) (S2Dxo) 日付型の変換に関して

> 同じオブジェクトであるべきか異なるオブジェクトであるべきか、
> また、変換(コピー)後に片方のみ書き換えるような処理の書き方が適切なのか否か、判断の難しいところかとは思いますが、
> 個人的には、異なるクラスに変換したときと同様、ミリ秒を経由して新規オブジェクトが生成された方が何かと都合がいいのではないかと思うのですが、いかがでしょうか。

そうですね,シャローコピーとディープコピーと同じような問題ですが,S2Dxo の用途を考えるとディープコピー的な方が問題は少なそうですね.
Date 等に限らず,配列やコレクション,それにBean についても同じ事が言えるので,ラッパー型等
不変なオブジェクトを除いてデフォルトは共有しないようにしたいと思います.

(Seasar-user:11288) Re: (S2Dxo) 日付型の変換に関して

賛成。