Kotlin : as, !, ? 周りのチートシート
キャストや、型や変数の後ろにつける ! 記号、 ? 記号の意味についてのまとめです。
?
var b : String? = "abc" b = null
型宣言に付けた場合は nullable (Kotlin は明示的に ? を付けないと null を代入できない)。
var l = b?.length
変数に付けた場合は Safe Call(安全な呼び出し)。 b が null でない場合にのみ関数を実行し、b が null の場合は null を返す。
?:
val l = b?.length ?: -1
?: の左側にくる式の値が null の場合は右側の値を返す。Elvis Operator。
!
※ Kotlin コードを書いている際に直接使用することはありません。
Java コード呼び出し時の引数や返り値に型の後ろについていて、T!
は T
もしくは ?
を表します。
例えば Android の Context.getFileStreamPath は IDE の補完機能では context.getFileStreamPath(name : String!) : File!
と表示されますが、! がついていることにより、引数や返り値に nullable な型でもそうでない型でもどちらでも使用できることがわかります。
var p0 : String? = null; var f0 : File? = context.getFileStreamPath(p0) var p1 : String = "" var f1 : File = context.getFileStreamPath(p1)
!!
var l = b!!.length()
b が Null の場合 Null Pointer Exception が発生します。
as
キャスト。キャストに失敗した場合は例外が発生します。
var x:String = y as String
as?
安全なキャスト。キャストが失敗した場合は null を返します。
var aInt : Int? = a as? Int