다음 (길이 편집) Kotlin 기능이 있습니다.
fun getType(obj: Any?): String {
if (obj != null)
println("$obj -> isArray:${isArray(obj)}")
return when (obj) {
null -> "null"
[...]
isArray(obj) -> "Array"
else -> "Other object"
}
}
private fun isArray(obj: Any): Any =
obj is Array<*> ||
[...]
obj is IntArray
나는 때 assertEquals("Array", getType(intArrayOf(1,2,3,4)))
나는 다음과 같은 출력을 얻을 :
[I@1e25b76 -> isArray:true
org.junit.ComparisonFailure:
Expected :Array
Actual :Other object
따라서 isArray
호출은를 반환 true
하지만 when
절 에서 인식되지 않습니다 . 왜 "Array"
여기로 돌아 오지 않을까요?
(이 특정 호출을 when
성명 앞에두면이 문제를 해결할 수 있지만보기에는 좋지 않습니다.)
먼저 것입니다,이 문제가 isArray
필요 반환 Boolean
하지 Any
.
두 번째 문제는 고정 된 조건이있는 when
표현식 의 형식을 사용하고 있고, 고정 된 조건 이없는 obj
형식 when
과 부울 표현식 만 사용 하는 형식과 혼합한다는 것입니다 . 문서는 차이점에 대해 명확하지 않습니다.
고정 when
조건식 :
when(obj) {
null -> "null"
is Array<*>, is IntArray, is DoubleArray -> "Array"
else -> "Other object"
}
사용할 필요가있는 것과 비교하여 when
식의 부울 식 :
when { // <--- no (obj) here
obj == null -> "null"
isArray(obj) -> "Array"
else -> "Other object"
}
배열을 찾는 훨씬 더 간단한 방법은 다음과 같습니다.
obj.javaClass.isArray
따라서 when
표현을 간단히 다음과 같이 변경할 수 있습니다.
when {
obj == null -> "null"
obj.javaClass.isArray -> "Array"
else -> "Other object"
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다