ブロックチェーン・AI・システム開発の株式会社INDETAIL

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

2015.10.09
INDETAIL

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のように変数宣言も型推論を使いたくなります。今後に期待ですね。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。