Java学习笔记技术干货

Google Guava之Utilities的Precondit

2018-04-23  本文已影响55人  编程界的小学生

一、核心源码

public static void checkArgument(boolean expression) {
    if(!expression) {
        throw new IllegalArgumentException();
    }
}
public static void checkState(boolean expression) {
    if(!expression) {
        throw new IllegalStateException();
    }
}
@CanIgnoreReturnValue
public static <T> T checkNotNull(T reference) {
    if(reference == null) {
        throw new NullPointerException();
    } else {
        return reference;
    }
}

PS:简单分析:

真心很简单,没什么可说的。唯一值得注意的就是checkNotNull方法若检查通过后会将原值原路返回。

二、Demo

package com.chentongwei.guava.utilities;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import org.junit.Test;

import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;

/**
 * @author TongWei.Chen 2018-04-22 18:38:00
 */
public class PreconditionsTest {

    /**
     * 检查是否会抛出空指针异常。
     */
    @Test(expected = NullPointerException.class)
    public void testCheckNotNull() {
        Preconditions.checkNotNull(null);
    }

    /**
     * 检查是否会抛出空指针异常。若会,则自定义message
     */
    @Test
    public void testCheckNotNullWithMessage() {
        try {
            Preconditions.checkNotNull(null, "空指针了");
        } catch (Exception e) {
            assertThat(e.getMessage(), equalTo("空指针了"));
        }
    }

    /**
     * 检查是否会抛出空指针异常。若会,则自定义可格式化的message(String.format())
     */
    @Test
    public void testCheckNotNullWithFormatMessage() {
        try {
            Preconditions.checkNotNull(null, "test");
        } catch (Exception e) {
            assertThat(e.getMessage(), equalTo("null test."));
        }
    }

    /**
     * 检查是否会出现参数异常
     */
    @Test(expected = IllegalArgumentException.class)
    public void testCheckArgument() {
        Preconditions.checkArgument("A".equals("B"));
    }

    /**
     * ************************************************************
     * checkArgument带参数的,和带格式化参数的省略不写.
     * ************************************************************
     */

    /**
     * 检查是否会出现状态异常
     */
    @Test(expected = IllegalStateException.class)
    public void testCheckState() {
        Preconditions.checkState("a".equals("b"));
    }
    /**
     * ************************************************************
     * checkState带参数的,和带格式化参数的省略不写.
     * ************************************************************
     */

    /**
     * 检查是否会出现数组下标越界
     */
    @Test(expected = IndexOutOfBoundsException.class)
    public void testCheckElementIndex() {
        List<String> lists = ImmutableList.of();
        Preconditions.checkElementIndex(1, lists.size());
    }
}

三、总结

真心没什么可讲的,就是前置条件的判断,另外Java8出的util包下的Objects的工具类也有这些功能。assert断言依然有。因为真心简单,自己写一个也是分分钟。

四、广告

上一篇下一篇

猜你喜欢

热点阅读