如果kotlin推广安全代码,例如:
val currentName = "Some Guy"
getDataFromServer()?.getUsers()?.find { it.name == currentName }?.profilePicture?.let {
showPicture(it)
} ?: let {
showAddPictureButton()
}
为什么没有类似的异常处理语法,例如使用假想的??.
运算符:
val someUserId = 123
val newName = "Cool Dude"
connectToDatabase()??.getDao<UserDao>()??.changeUserName(someUserId, newName)??.let { newUserData ->
reloadView(newUserData)
} ??: let { error ->
interpretAndHandleError(error)
}
我看不出这里有什么缺点。这不是语言的一部分有什么原因吗?
这不是缺点,而是没有足够的好处。考虑写第一个没有?.
:的例子
val data = getDataFromServer()
if (data != null) {
val users = data.getUsers()
if (users != null) {
val user = users.find { it.name == currentName }
if (user != null) ...
} else null
} else null
您可以看到它比原始代码复杂得多。现在考虑在没有它的情况下编写您建议的??.
:
try {
connectToDatabase().getDao<UserDao>().changeUserName(someUserId, newName).let { newUserData ->
reloadView(newUserData)
}
} catch(error: Exception) {
interpretAndHandleError(error)
}
您想消除的复杂性在哪里?