通常在编写公共方法时,我会进行一些错误检查,例如
public SomeResult processSomething (int i, List<String> items) {
if( i < 0 ) {
throw new IllegalArgumentException();
}
if(items == null) {
throw new NullPointerException();
}
etc
}
在android编程中,这是什么标准方法?我注意到当一个片段崩溃时,模拟器会转到上一个片段,所以从显示给用户的行为我觉得没问题。但是,处理异常/错误条件的最佳方法是什么?
答案 0 :(得分:2)
这里的最佳实践与Java世界其他地方使用的实践非常相似:
1。方法的第一行通常用于检查方法参数的有效性。如果发生错误,该方法应尽快失败。
验证参数时,如果测试失败,则抛出Exception
。它通常是抛出的未经检查的异常之一:
IllegalArgumentException
NullPointerException
IllegalStateException
这些都来自RuntimeException
。
2. 如果 类中的每个方法的每个对象参数都需要为非null,以避免抛出{{1然后,可以接受在普通类NullPointerException
中说明一次,而不是为每个方法重复一次。
<强>参考文献:强>
Preconditions, Postconditions, and Class Invariants
修改强>
要回答关于&#34;查看特定于错误的问题&#34;:虽然可以做到这一点,但我们的想法是javadoc
表示代码中存在编程错误。因此,应该允许应用程序崩溃,以便用户可以报告错误,从而开发人员从应用程序的Play商店帐户获取错误日志。这样他就可以纠正这些错误的来源。这个过程应该继续,直到假设应用程序完全没有错误。
答案 1 :(得分:0)
现在我们可以使用Kotlin Preconditions.kt
:
data class User(val active: Boolean, val email: String?)
class UserHelper (private val user: User) {
fun mergeUsers(otherUser: User) {
// To verify enclosing class state we use "check methods".
// If check fails IllegalStateException will be thrown
checkNotNull(user.email) { "user email is null" }
check(user.active) { "user is not active" }
// To verify argument we use "require methods".
// If check fails IllegalArgumentException will be thrown
requireNotNull(otherUser.email) { "otherUser email is null" }
require(otherUser.active) { "otherUser is not active" }
// All the preconditions has been meet, so we can merge users
// ...
}
}