kotlin エラー「error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?」の解決方法

kotlin エラー「error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?」の解決方法

kotlinで、エラー「error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?」解決方法を記述してます。「null許容型」に対して「length」などで「null」に対して長さを取得しようとした際に発生します。

環境

  • OS windows11 home
  • java 19.0.1
  • kotlin 1.7.20-release-201

エラー全文

以下の、コードで発生。

fun main() {

    var str: String? = null

    println(str.length)

}

エラーメッセージ

error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
    println(str.length)
               ^

原因

「null許容型」のまま、「length」を使用しているため

対処法

「セーフコール演算子」を使用する。

fun main() {

    var str: String? = null

    println(str?.length) // null

}

または「エルビス演算子」を使用する方法もあります。

fun main() {

    var str: String? = null

    println(str ?: "nullです") // nullです

}

「let」を使用することも可能です。

fun main() {

    var str: String? = null

    str?.let {
        println(it.length)
        null
    } ?: run {
        println("nullです")
    }

}