Google Guava学习笔记——基础工具类Preconditions类的使用

  Preconditions类是一组静态方法用来验证我们代码的状态。Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们使用Preconditions来保证我们代码的行为,并且对调试也非常方便。

  当然,你也可以自己写预处理的代码,就像下面一样:

if (someObj == null) {
        throw new IllegalArgumentException(" someObj must not be null");
    }

  但使用Preconditions类来处理参数为空的情况,会更加清晰可读:

Preconditions.checkNotNull(label, "Label can't not be null");

  下面的类演示了Preconditions类的使用:

  

package com.guava.felix;

import com.google.common.base.Preconditions;

public class PreconditionsDemo {

    private String label;

    private int[] values = new int[5];

    private int currentIndex;

    public PreconditionsDemo(String label) {
    this.label = Preconditions.checkNotNull(label, "Label can't not be null");
    }

    public void updateCurrentIndexValue(int index, int valueToSet) {
    // check index valid first
    this.currentIndex = Preconditions.checkElementIndex(index, values.length, "Index out of bounds for values.");
    // validate valueToSet
    Preconditions.checkArgument(valueToSet <= 100, "Value can't be more than 100");
    values[this.currentIndex] = valueToSet;
    }

    public void doOperation() {
    Preconditions.checkState(validateObjectState(), "Can't perform operation.");
    }

    private boolean validateObjectState() {
    return this.label.equalsIgnoreCase("open") && values[this.currentIndex] == 10;
    }

    public static void main(String[] args) {
    PreconditionsDemo demo = new PreconditionsDemo("open");

    demo.updateCurrentIndexValue(4, 10);

    demo.doOperation();

    }

}

 下面是例子中四个方法的总结:

  checkNotNull(T object, Object message): object对象不为空的话返回,否则抛出异常。

  checkElementIndex(int index, int size, Object message): index表示你要访问的数组,集合,字符串的位置,size表示的是长度,如果 index是有效的则返回,否则抛出异常;

  checkArgument(Boolean expression, Object message):这个方法根据传递进来的参数是否满足方法中的逻辑判断,如果符合,返回true,否则抛出异常。

  checkStatus(Boolean expression, Object message):这个方法没有参数,它判断一个对象的状态,期望返回true,否则抛出异常。

 

posted @ 2015-05-18 14:58  林本托  阅读(745)  评论(0编辑  收藏  举报