nullable이 있으면 Boolean b
Java에서 다음 비교를 수행 할 수 있습니다.
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
Kotlin에서는 !!
연산자 를 사용하여 동일한 결과를 얻을 수 있습니다 .
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
그러나 사용은 !!
널 안전 시스템을 우회하여 나에게 약간 스케치 느낌이 듭니다.
이에 대한 더 우아한 접근 방식이 있습니까?
편집 조금 과장된 것 같습니다. 지역 변수의 경우 Banthar가 보여 주듯이 작동합니다. 그러나 내 부울 b
은 실제로 “백킹 필드가있는 속성”입니다 (나는 아직 속도에 익숙하지 않습니다). 결과는 다음과 같습니다.
답변
당신은 널 (NULL)와 부울 비교할 수 있습니다 true
, false
또는 null
평등 연산자를 사용하여 :
var b: Boolean? = null
if (b == true) {
// b was not null and equal true
}
if (b == false) {
// b is false
}
if (b != true) {
// b is null or false
}
답변
당신이 명확하게 확인하려는 경우가 있는지 여부 Boolean?
입니다 true
또는false
당신은 할 수 있습니다 :
when(b) {
true -> {}
false -> {}
}
그것이 맞는지 확인하고 싶다면 null
그 (또는 else
)를 다음 값으로 추가 할 수 있습니다 when
.
when(b) {
true -> {}
false -> {}
null -> {}
}
when(b) {
true -> {}
false -> {}
else-> {}
}
답변
Kotlin은 null 검사를 정적으로 분석합니다. 이건 괜찮아:
val b: Boolean? = null
if (b != null && b) {
println(b)
}
이것이 유형 오류로 실패하더라도 :
val b: Boolean? = null
if (b == null && b) {
println(b)
}
자세한 내용은 http://kotlinlang.org/docs/reference/null-safety.html을 참조하십시오.
“null 통합 연산자”(변경 가능한 변수에 대해 작동 함)를 사용할 수도 있습니다.
val b: Boolean? = null
if (b ?: false) {
println(b)
}
답변
내가 본 부울에서? nullable 개체에 대해 Boolean을 반환하는 메서드의 결과입니다.
val person: Person? = null
....
if(person?.isHome()) { //This won't compile because the result is Boolean?
//Do something
}
내가 사용한 해결책은 let
함수를 사용 하여 가능한 반환 된 null 값을 제거하는 것입니다.
person?.let {
if(it.isHome()) {
//Do something
}
}
답변
Kotlin에서 다음과 같이 할 수 있습니다.
val b: Boolean? = true
if (b == true) { // if b is null, this should be null == true
/* Do something */
} else {
/* Do something else */
}
답변
먼저 아래에 사용자 정의 인라인 함수를 추가하십시오.
inline fun Boolean?.ifTrue(block: Boolean.() -> Unit): Boolean? {
if (this == true) {
block()
}
return this
}
inline fun Boolean?.ifFalse(block: Boolean?.() -> Unit): Boolean? {
if (null == this || !this) {
block()
}
return this
}
그런 다음 다음과 같은 코드를 작성할 수 있습니다.
val b: Boolean? = ...
b.ifTrue {
/* Do something in true case */
}
//or
b.ifFalse {
/* Do something else in false case */
}
답변
Kotlin의 경우 일반적으로 사용하는 것은
if (object?.booleanProperty ==true)
{
//do stuff
}
이것은 속성이 true이고 객체가 null이 아닌 경우에만 작동합니다. 반대의 경우 :
if (!object?booleanProperty !=true)
{
//do Stuff
}