リファクタリング プログラミング Java

【Java】Optionalが処理できないならデフォルト値を返そう

投稿日:

概要

Optionalはnullである可能性を明示的に返してくれる便利なコンテナ・オブジェクトです。
if(obj == null)… といったことをしなくてよくなったのは素晴らしいことだと思っています。

考察内容

nullをOptional型で返してSyetem.out.printすると「Optional.empty」が表示されます。
null安全なのは良いけど、WebアプリケーションのView等に表示するわけにはいかないなぁと感じたのがきっかけです。

対応方法として、Optionalを返すのではなく、nullをデフォルト値等に変換してから返してしまえばいいのではないかというのが考えです。

実装例

商品情報を持つItemオブジェクト(WebアプリケーションだとEntity想定)
  • name、amountは必須項目なので値は必ず保持しており、descriptionはnullである可能性がある状況を想定。
  • descriptionはフィールドとしてはnullを保持するが、アクセサで返す値はデフォルト値として空文字にする。
  • これにより、Entityとしてはnullを持つのでDB値と整合性が取れ、利用側のクラス(ここではMain)はデフォルト値(空文字)を扱うことができる。

 


Optional.empty
[name: BRAVIA, amount: 79000, description: null]
description is

Webアプリケーションなんかで、modelにそのままentityを渡して表示させると、「Optional.empty」が出てしまうので、アクセサ(Getter)でデフォルト値にしてしまうのが、適切かなぁと思った次第です。

まとめ

  • Optionalはnull安全にできる便利なコンテナ・オブジェクトである。
  • 利用側で処理せず、「Optional.empty」となってしまうようであれば、デフォルト値を返してしまうのがよさそう。
  • フィールドで保持する値(null)とアクセサで返す値(空文字)を分けることで、DB値と利用側で表示する値を区別して扱うことも可能になる。

参考

Qiita – Optionalの正しい使い方
Qiita – 【Java】Optionalの正しい使い方を学ぶ
Qiita – Java 8 “Optional” ~ これからのnullとの付き合い方 ~
Qiita – [Java8] Optionalで脱Exception!

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【Java入門】クラスの継承、オーバーライド

概要 クラスの継承とは、継承元(親)のフィールド(値)、メソッド(機能)を継承先(子)に引き継がせることです。 継承先(子)では、追加のフィールド(値)、メソッド(機能)を持つことができます。 つまり …

ExcelをA1セルに揃えて拡大率100%にするツール

(追記:2021年8月18日) サブフォルダを処理対象にするかどうかを選択できるように改修しました。   たくましゅくじょさんのところで公開されていた、 「エクセルで全シートの拡大率を100%にしA1 …

【Java入門】Predicateの使い方まとめ

概要 Predicateはtestメソッド持つ関数型インターフェースです。 引数を1つ受け取り、booleanを返します。   基本的な使い方 test(T t)には、ジェネリクスに指定する型を引数と …

【Javaサンプル】自動販売機(Level3) クラス分け

自動販売機(Level2)では、小さいメソッドに処理を切り出すことを学びました。 しかし、まだMainクラス1つの中で完結しているプログラムです。 オブジェクト指向言語であるJavaを使うなら、クラス …

【Java】TDDして汎用的な部品を作成する(日付期間オブジェクト)

目的 TDDブートキャンプというセミナーに参加して面白かったので、 自分で何かやってみようと思った。 仕様 日付期間を保持するオブジェクトである。 開始日と終了日を持つ。 開始日と終了日を持つことをど …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。