logo header
logo header
logo header
logo header
  • 2015.10.09
  • 技術ブログ開発

Java8のfunctionパッケージでPOJOを型安全にコピーする

JavaのWeb開発などで画面→DB、またはその逆方向にPOJOをコピーする事が多いと思います。
その時に画面側とDB側のフィールド名が同じならほとんどの場合に、Commons BeanUtilsを使うと楽です。ですが、異なる名前にコピーしたいとなると途端に面倒になります。更にコピー条件が必要となると尚更です。
どうにかできないかと考えた結果、Java8に追加されたjava.util.functionパッケージとOptionalクラスを使うことで汎用的かつ型安全なコピー処理を実現できました。

引数は次のような意味です。

  • Supplierインターフェースは引数なし、返り値ありのメソッドがあるのでPOJOのGetterと対応
  • Consumerインターフェースは引数1つ、返り値なしのメソッドがあるのでPOJOのSetterと対応
  • Predicateインターフェースを利用することでコピー条件を引数として渡す

以下のテストケースは利用例です。

copyIfNotNullメソッドはクロージャのように定義することができます。
ですが、宣言も呼出も冗長になるので素直にメソッド定義した方がよいでしょう。

以上、functionパッケージを応用してPOJOを型安全にコピーする方法でした。
ここまでくるとC#のvarのように変数宣言も型推論を使いたくなります。今後に期待ですね。

ともに世界をアップグレードできる、そんな日を夢見て。
Upgrade the World!