公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

Guava Preconditions类 提供静态方法列表,用于检查是否使用有效参数值调用方法或构造函数。如果前提条件失败,则会抛出指定的异常。

前置依赖

引入 pom

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>

checkArgument

Preconditions类的checkArgument方法用于校验传递给调用方法的参数的正确性。该方法接收一个布尔条件,当条件为false时,抛出IllegalArgumentException异常。

让我们通过一些示例来看看如何使用这个方法。

import com.google.common.base.Preconditions;

public class ExampleClass {
public void processNumber(int number) {
Preconditions.checkArgument(number > 0, "Number must be positive");
// 进行处理逻辑
} public static void main(String[] args) {
ExampleClass example = new ExampleClass();
example.processNumber(10); // 正常调用,参数符合条件 example.processNumber(-5); // 抛出IllegalArgumentException异常,参数不符合条件
}
}

抛出带有模板的错误信息

public class PreconditionsTest {
public void processNumber(int number) {
Preconditions.checkArgument(number > 0, "Number must be positive: %s", number);
// 进行处理逻辑
}
@Test
public void testCheckArgumentTemplate() {
processNumber(10);// 正常调用,参数符合条件
processNumber(-5); // 抛出IllegalArgumentException异常,参数不符合条件,异常消息中包含具体的参数值
}
}

在上述示例中,我们在checkArgument方法的第二个参数中使用了带有占位符的消息模板:"Number must be positive: %s"。该占位符%s表示在抛出异常时会被具体的参数值替换。在调用processNumber方法时,如果传递的参数不满足条件,将抛出IllegalArgumentException异常,并在异常消息中包含具体的参数值。

checkElementIndex

Preconditions类的checkElementIndex方法用于验证索引是否包含在集合中,如果不包含,该方法将抛出IndexOutOfBoundsException异常

   @Test
public void testCheckElementIndex(){
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange"); int index = 3;
Preconditions.checkElementIndex(index, list.size(), "Invalid index"); String element = list.get(index);
System.out.println("Element at index " + index + ": " + element);
}

在本例中,我们使用集合的size作为集合的大小参数,并提供了错误消息Invalid index。如果索引超出了集合的有效范围,将抛出异常并显示错误消息。

如果在范围内,则使用list.get方法获取指定索引的元素,并将其打印出来。

checkNotNull

checkNotNull方法检查作为参数提供的值是否为 null。如果不为 null 则返回校验后的值。如果传递给此方法的值为 null,则抛出NullPointerException。

以下是一个示例,说明了checkNotNull方法的使用:

  @Test
public void testCheckNotNull(){
String name = "John Doe";
Preconditions.checkNotNull(name, "Name cannot be null");
System.out.println("Name: " + name);
}

在此示例中,我们使用checkNotNull方法验证字符串name是否为null。如果name不为null,将继续处理;如果name为null,将抛出NullPointerException异常,并显示错误消息"Name cannot be null"。

checkState

Preconditions类的checkState方法用于验证对象或程序的状态是否符合预期。以下是一个示例,说明了checkState方法的使用:

  @Test
public void testCheckState() {
int[] validStates = {-1, 0, 1};
int givenState = 8;
String message = "You have entered an invalid state";
Preconditions.checkState(Arrays.binarySearch(validStates, givenState) > 0, message);
}

在此示例中,我们使用checkState方法验证givenState是否包含在validStates数组中。如果false,则抛出IllegalStateException,并显示信息为You have entered an invalid state,否则继续处理;

总结

在本教程中,我们演示了Guava库中PreConditions类的各种方法。Preconditions类提供了静态方法的集合,用于验证参数是否有效。

代码地址:https://github.com/dongweizhao/guava-example

Guava Preconditions类的各种用法的更多相关文章

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

    Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们 ...

  2. 探索guava(一)——前置条件Preconditions类

    作用 可以简洁的完成参数检验,在进行业务逻辑代码前进行前置判断.并且避免了冗长的if语句.guava将所有检验的API都放置于Preconditions类中. API Preconditions类大致 ...

  3. Guava工具类学习

    目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.R ...

  4. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  5. Google guava工具类的介绍和使用

    概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API ...

  6. Delphi 类的类 class of 用法

    http://blog.csdn.net/blue_morning/article/details/8815609 Delphi 类的类 class of 用法   这个概念本来在一个关于Delphi ...

  7. 【opencv基础】Rect类的神奇用法

    前言 最近看github上源码发现对两个cv::Rect使用相与(&)操作,猛地感觉自己蒙啦,Rect类还有这种神奇用法?!翻看opencv官网Rect类,果然如此! opencv中Rect类 ...

  8. Java文件(io)编程——File类的基本用法

    1.首先了解文件流的相关概念: 2.文件File类的基本用法 public class Demo_1 { public static void main(String[] args) { //创建一个 ...

  9. Java中File类的基本用法

    File类的基本用法 java.io.File类:代表文件和目录.在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到此类. File类的常用构造方法:public File(Strin ...

  10. 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+

    1.模板类pair的用法 包含头文件#include<utility>   http://blog.csdn.net/laixingjun/article/details/9005200 ...

随机推荐

  1. Linux cpu 亲缘性 绑核

    前言 https://www.cnblogs.com/studywithallofyou/p/17435497.html https://www.cnblogs.com/studywithallofy ...

  2. 如何使用API接口获取Lazada商品详情数据

    随着电商市场的不断发展壮大,越来越多的人开始选择在网上购买商品.其中,东南亚地区的Lazada电商平台备受欢迎.如果您是一名电商从业者,或者打算在Lazada上开店,那么获取商品详情信息将是一个非常重 ...

  3. 文盘Rust——起手式,CLI程序

    技术的学习从不会到会的过程是最有意思的,也是体会最多的.一旦熟练了,知识变成了常识,可能就失去了记录学习过程的最佳时机. 在我看来学习一门计算机语言和学习人类语言有很多共通之处.我们学习人类语言是从单 ...

  4. 从驾考科目二到自动驾驶,聊聊GPU为什么对自动驾驶很重要

    "下一个项目,坡道起步." -- "考试不合格,请将车子开到起点,重新验证考试.你的扣分项是:起步时间超30秒:扣100分.行驶过程中车轮轧到边线:扣100分." ...

  5. Spring Bean 的作用域(Bean Scope)

    前言 大家好,我是 god23bin,今天我们来聊一聊 Spring 框架中的 Bean 作用域(Scope). 什么是 Bean 的作用域? 我们在以 XML 作为配置元数据的情况下,进行 Bean ...

  6. git命令和遇到的问题

    命令 1.快速关联/修改Git远程仓库地址 (1).删除本地仓库当前关联的无效远程地址,再为本地仓库添加新的远程仓库地址 git remote -v //查看git对应的远程仓库地址 git remo ...

  7. dedebiz发布文章自动提交到百度搜索的方法

    修改程序文件 依次打开/admin/article_add.php和article_edit.php 找到ClearMyAddon($id, $title); 在其上面加入 //自动提交到百度 els ...

  8. 在同一个k8s集群中部署多套nginx-controller

    1.nginx-controller部署请参考我的另一篇博客 nginx Ingress Controller Packaged by Bitnami 2.修改values.yaml 不通contro ...

  9. Python爬虫如何使用代理IP进行抓取

    前言 Python爬虫是一种非常强大的工具,可以用于抓取各种网站的数据.但是,在一些情况下,我们需要使用代理IP来完成数据抓取,如绕过IP限制或保护隐私信息等.本文将介绍如何使用Python爬虫抓取数 ...

  10. C++ STL快速入门方法

    在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...