Java SE 8から新たに追加されたOptional
を使うとnull
になりうる型として明示できます。これによりNullPointerException
を防ぎ、安全にnull
を扱うことができます。
🚜 Optionalの基礎
Optional
を使わない場合はif文でnull
チェックを行っていました。
Article article = getArticle(); if (article != null) { article.getTitle(); }
|
Optional
を利用することで、値が存在する場合だけ処理を行うことを明示的に記述できます。
Optional optionalArticle = Optional.ofNullable(getArticle()); optionalArticle.ifPresent(article -> article.getTitle());
|
😎 Optionalの生成
Optional
コンストラクタの生成メソッドof
、ofNullable
の紹介です。
StringBuilder sb = null; Optional osb = Optional.of(sb);
Optional osb2 = Optional.ofNullable(sb);
|
これ以外に基本変数型のためにOptionalInt
、OptionalLong
、OptionalDouble
があります。
OptionalInt optionalInt = OptionalInt.of(1); OptionalLong optionalLong = OptionalLong.of(10L); OptionalDouble optionalLong = OptionalDouble.of(10.0);
|
🐡 Optionalから
Optional
インスタンスを使うと、nullチェックを含めた値の取得を行うことができます。
StringBuilder sb = null; Optional osb = Optional.ofNullable(sb);
StringBuilder sb1 = osb.get(new StringBuilder(none))
StringBuilder sb2 = osb.orElse(new StringBuilder(none));
osb.ifPresent(sb -> { sb.insert(0, []); sb.append(]); });
|
🚌 Optionalを処理してOptionalを返すメソッド
### 条件に一致する場合のみ値をセット:filter
Optional optArticle = Optional.ofNullable(getArticle()); Optional filteredArticle = optArticle.filter(article -> article.getTitle().length() >= 2);
|
特定の処理をして結果をセット:map
Optional str = Optional.of("article").map(String::toUpperCase); System.out.println(str);
|
🐠 Optionalによるnullチェックや置換え
多段でnullチェックをして値を取り出すのではなく、Optional
を使ってnullチェックを行うことでコードの可読性を向上できます。
class Name { private final Optional first; Optional getFirst() { return this.first; } }
class Person { private final Optional name; Optional getName() { return this.name; } }
void showPersonFirstName(Optional person) { person.flatMap(Person:getName) .flatMap(Name::getFirst) .ifPresent(System.out::Println); }
|
😀 参照リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!