验证android中的函数前置条件

时间:2015-03-22 11:11:07

标签: java android methods error-handling preconditions

通常在编写公共方法时,我会进行一些错误检查,例如

public SomeResult processSomething (int i, List<String> items) {
   if( i < 0 ) {
      throw new IllegalArgumentException();
   }
  if(items == null) {
     throw new NullPointerException();
  }
etc
}

在android编程中,这是什么标准方法?我注意到当一个片段崩溃时,模拟器会转到上一个片段,所以从显示给用户的行为我觉得没问题。但是,处理异常/错误条件的最佳方法是什么?

2 个答案:

答案 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
        // ...
    }
}