Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Optionalをもっとつかいたい+新技術の導入あれこれ / Using the Option...

Optionalをもっとつかいたい+新技術の導入あれこれ / Using the Optional class more

Avatar for Yoshihiro Yoneyama

Yoshihiro Yoneyama

July 12, 2025
Tweet

More Decks by Yoshihiro Yoneyama

Other Decks in Programming

Transcript

  1. 自己紹介 BABY JOB 株式会社 名前 所属 米山 佳宏 (ヨネヤマヨシヒロ) 鉄道車両設計 → 建築設計

    → Webエンジニア 略歴 野鳥観察、サイクリング etc.. 趣味 @noraneko_dev Yoshihiro Yoneyama
  2. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 結 論
  3. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 大丈夫 結 論
  4. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 大丈夫 結 論 ※ちゃんと設計したら
  5. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 大丈夫 結 論 ※ちゃんと設計したら ※ドメインモデルにおいては
  6. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) ドメインモデル 自体の表現力が高くなる Optionalを使う設計レベルのメリット
  7. @AllArgsConstructor class User { String name; Integer age; String address;

    } @AllArgsConstructor class User { @NonNull String name; @NonNull Integer age; @NonNull Optional<String> address; } Optional 無し Optional 有り
  8. @AllArgsConstructor class User { String name; Integer age; String address;

    } @AllArgsConstructor class User { @NonNull String name; @NonNull Integer age; @NonNull Optional<String> address; } Optional 無し Optional 有り 各フィールドが 未入力の可能性があるかが わからない
  9. @AllArgsConstructor class User { String name; Integer age; String address;

    } @AllArgsConstructor class User { @NonNull String name; @NonNull Integer age; @NonNull Optional<String> address; } Optional 無し Optional 有り 各フィールドが 未入力の可能性があるかが わからない 各フィールドが 未入力の可能性があるかが わかる!
  10. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 実装上のメリットもあるんだよ! / \
  11. @AllArgsConstructor class User { @NonNull String name; @NonNull Integer age;

    @NonNull Optional< String > address; } addressは存在しないこともあるんだな
  12. @AllArgsConstructor class User { @NonNull String name; @NonNull Integer age;

    @NonNull Optional<String> address; } 型レベルでnullの使用を防ぐことができる
  13. @AllArgsConstructor @Getter class User { @NonNull String name; @NonNull Integer

    age; @Nullable String address; public Optional<String> getAddress() { return Optional.ofNullable(this.address) } } @AllArgsConstructor @Getter class User { @NonNull String name; @NonNull Integer age; @NonNull Optional<String> address; } Before After
  14. @AllArgsConstructor @Getter class User { @NonNull String name; @NonNull Integer

    age; @Nullable String address; public Optional<String> getAddress() { return Optional.ofNullable(this.address) } } @AllArgsConstructor @Getter class User { @NonNull String name; @NonNull Integer age; @NonNull Optional<String> address; } Before After 明らかにスッキリ!
  15. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) おまけ
  16. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) どうやってチームに取り入れる? Q
  17. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) どうやってチームに取り入れる? Q A
  18. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 丁寧な説明をした上で証人を増やす どうやってチームに取り入れる? Q A
  19. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) おまけのおまけ
  20. Exception in thread "main" java.lang.NullPointerException: Attempt to call method on

    null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) Exception in thread "main" java.lang.NullPointerException: Attempt to call method on null object reference at com.example.FakeClass.method(FakeClass.java:42) 以上