【guava】前提条件

       guava为编写漂亮代码提供了很大的便利,今天,我想向你展现下我是怎么使用预判断来避免没必要要的if/throw 申明,使用选择来提高代码逻辑性。java

  预判断并非新东西,Apache Commons项目有相似的功能,可是并无瓜娃提供的解决方案简洁,预判断用来验证方法的参数,状态等等,当条件判断结果是false,预判断就会抛出预想的异常,预想的意味着如下情形,当检查状态的时候,你可使用Preconditions.checkState( 条件 ),若是条件判断的结果是false,将会抛出非法状态异常,一样,另一种预判断checkArgument会抛出非法参数异常,固然,使用预判断你惟一须要明确的时候就是使用静态导入,让咱们来看一个例子。this

  给出的是一个方法,接受list做为参数,当这个方法被调用的时候,咱们须要检查list是否是null和是否是空,通常的java解决方案以下所示:spa

      

public void doSomething( List<Object> list ) {
  if( list == null ) {
    throw new IllegalArgumentException( "List must not be null" );
  }
  if( list.isEmpty() ) {
    throw new IllegalArgumentException( "List must not be empty" );
  }
  doSomethingMore( list );
}

 

  当使用guava的预判断,代码的数量明显减小,解决方案以下所示.设计

  
public void doSomething( List<Object> list ) {
  checkArgument( list != null, "List must not be null" );
  checkArgument( !list.isEmpty(), "List must not be empty" );
  doSomethingMore( list );
}

 

  这确定是一个提高,可是,当这个方法结合瓜娃的选择变得真正的性感,选择是一个概念,被设计来避免病态的null概念(阅读这里理解我为神马叫她“病态”),这里明显有一个对象容器来避免空引用,例如,null 大部分时间用来检查一个对象是否是存在,若是不存在,一个空指针异常发生了,结果如如下代码所示:指针

public void doSomething() {
  if( this.field == null ) {
    throw new IllegalStateException( "Field is not initialized" );
  }
  doSomethingMore();
}

 

  与其保存这个对象直接放到field,我常常使用选择.这避免了我代码中的空指针异常而且显得更合语法,上面这个例子结合选择变成了以下所示:code

public void doSomething() {
  checkState( field.isPresent(), "Argument is not initialied" );
  doSomethingMore();
}

 

最后,由你决定这个代码是否是更好更简洁,经过使用预判断和选择.从个人观点来看,这么写更具备可读性对象

相关文章
相关标签/搜索