私はKotlinを初めて使用するので、次のコードをより洗練されたものに書き直す手助けを探しています。
var s: String? = "abc"
if (s != null && s.isNotEmpty()) {
// Do something
}
次のコードを使用した場合:
if (s?.isNotEmpty()) {
コンパイラは文句を言うでしょう
Required: Boolean
Found: Boolean?
ありがとう。
isNullOrEmpty
またはそのフレンド isNullOrBlank
を次のように使用できます:
if(!s.isNullOrEmpty()){
// s is not empty
}
isNullOrEmpty
とisNullOrBlank
はどちらもCharSequence?
の拡張メソッドであるため、null
で安全に使用できます。または、null
をfalseに変更します。
if(s?.isNotEmpty() ?: false){
// s is not empty
}
次のこともできます
if(s?.isNotEmpty() == true){
// s is not empty
}
@miensolの回答はとても気に入っていますが、私の回答は次のようになります(そのため、コメントに含めません):if (s != null && s.isNotEmpty()) { … }
実際isの慣用的な方法コトリン。この方法でのみ、ブロック内でString
へのスマートキャストを取得できます。一方、承認された回答では、ブロック内でs!!
を使用する必要があります。
または、拡張メソッドを作成して安全な呼び出しとして使用します。
fun String?.emptyToNull(): String? {
return if (this == null || this.isEmpty()) null else this
}
fun main(args: Array<String>) {
val str1:String?=""
val str2:String?=null
val str3:String?="not empty & not null"
println(str1.emptyToNull()?:"empty string")
println(str2.emptyToNull()?:"null string")
println(str3.emptyToNull()?:"will not print")
}