deinspanjer
05/24/2017, 7:41 PMprintln("getMember($name)")
when (name) {
"toString" -> return { obj.toString() }
"valueOf" -> return {
when (obj) {
is JsonNull -> null
is JsonArray -> obj.toString()
is JsonPrimitive ->
if (obj.isNumber) obj.asNumber
else if (obj.isBoolean) obj.asBoolean
else obj.asString
else -> obj.toString()
}
}
else -> {
try {
return obj[name!!]
} catch (e: NoSuchElementException) {
return null
}
}
}
pawel.barszcz
05/24/2017, 7:44 PMAny
too) if I put one return
before when
instead of returning the whole function inside every branch of when
return when (...) {
... -> someValue
... -> when (...) {
... -> is ... -> anotherValue
else -> yetAnotherValue
so the whole when
is an expression which evaulates to something and that something is then returned from functiondeinspanjer
05/24/2017, 7:46 PMpawel.barszcz
05/24/2017, 7:46 PMwhen
would have some type (propbably Any
), while now, I guess, it have Nothing
type (because you are calling return
inside when
, and return is terminating the whole function so it;s probably a type Nothing
)deinspanjer
05/24/2017, 7:48 PMoverride fun getMember(name: String?): Any? {
println("getMember($name)")
return {
when (name) {
"toString" -> obj.toString()
"valueOf" -> when (obj) {
is JsonNull -> null
is JsonArray -> obj.toString()
is JsonPrimitive ->
if (obj.isNumber) obj.asNumber
else if (obj.isBoolean) obj.asBoolean
else obj.asString
else -> obj.toString()
}
else -> {
try {
obj[name!!]
} catch (e: NoSuchElementException) {
null
}
}
}
}
}
pawel.barszcz
05/24/2017, 7:49 PM{ obj.toString() }
returned in toString
branchobj.toString()
as you have written in modified sample aboveNoSuchElementException
only, when you still can have exception because of calling !!
on nullable name
return when (name) {
"toString" -> obj.toString()
"valueOf" -> when (obj) {
is JsonNull -> null
is JsonArray -> obj.toString()
is JsonPrimitive ->
if (obj.isNumber) obj.asNumber
else if (obj.isBoolean) obj.asBoolean
else obj.asString
else -> obj.toString()
}
else -> try {
obj[name!!]
} catch (e: Throwable) {
null
}
}