nullable => Optional

Kotlin でコードを書いていると、 Java の Optional に変換する必要が出てきます。
そういった場合は Optional.ofNullable を使って Optional に変換します。
nullable でなければ Optional.of を使うこともできます。

サンプル

    class SecurityAuditorAware: AuditorAware<Long> {
        override fun getCurrentAuditor(): Optional<Long> {
            val authentication = SecurityContextHolder.getContext().authentication

            if (authentication == null || !authentication.isAuthenticated) {
                return Optional.ofNullable(null)
            }

            return Optional.ofNullable((authentication.principal as UserDetail?)?.user?.id)
        }
    }

Java から見たら Kotlin の nullable はそうでないものと同じものに見えるので、 Optional<Long?>Optional<Long>Optional<Long>?Optional<Long?>? も同じです。 サンプルにある getCurrentAuditor() の返り値の型には それらの 4パターンを使うことができます。

Optional => nullable / not-nullable

Spring 5 の リポジトリ で findById を使うと、 Optional<T> が返ってきます。
そういう場合に Kotlin に値を渡すために Optional から中身を取り出したいことがあります。

optionalValue.get() => not-nullable
optionalValue.orElse(null) => nullable

その他

Optional 型 の値にはほかにもさまざまなmethodが用意されています。

次の記事に詳しく記載されていました。
https://qiita.com/tasogarei/items/18488e450f080a7f87f3

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.