美文网首页Java学习笔记技术干货
Google Guava之Utilities的Precondit

Google Guava之Utilities的Precondit

作者: 编程界的小学生 | 来源:发表于2018-04-23 09:15 被阅读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断言依然有。因为真心简单,自己写一个也是分分钟。

    四、广告

    • Demo源码已上传到码云,文章会定期更新。如果觉得对您有帮助,希望给个star。

      https://gitee.com/geekerdream/google-guava/

    • QQ群【Java初学者学习交流群】:458430385

    • 微信公众号【Java码农社区】

      img
    • 今日头条号:编程界的小学生

    相关文章

      网友评论

        本文标题:Google Guava之Utilities的Precondit

        本文链接:https://www.haomeiwen.com/subject/itgclftx.html