Skip to content

Instantly share code, notes, and snippets.

@omuomugin
Last active October 25, 2020 04:06
Show Gist options
  • Save omuomugin/3d819983e6bccf0a73947595ba44938b to your computer and use it in GitHub Desktop.
Save omuomugin/3d819983e6bccf0a73947595ba44938b to your computer and use it in GitHub Desktop.
// これはだめ
fun foo(s: String?) {
print(s.toUpperCase()) // s は nullable なので s? or s!! しないとメソッド呼び出しできない
}
// これはok
fun foo(s: String?) {
requireNotNull(s) // not null であることが事前条件に書かれてるのでこれ以降のスコープでは nonnullとして スマートキャストされる
print(s.toUpperCase())
}
// 型とかでも同じ
fun foo(s: Any) {
require(s is String) // これ以降は s は Any ではなく String
}
// see also https://kotlinlang.org/docs/reference/whatsnew13.html#contracts
// といっても run time であることには変わりがないけれど
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment