Guava Preconditions类的各种用法
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。
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类的各种用法的更多相关文章
- Google Guava学习笔记——基础工具类Preconditions类的使用
Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们 ...
- 探索guava(一)——前置条件Preconditions类
作用 可以简洁的完成参数检验,在进行业务逻辑代码前进行前置判断.并且避免了冗长的if语句.guava将所有检验的API都放置于Preconditions类中. API Preconditions类大致 ...
- Guava工具类学习
目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.R ...
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- Google guava工具类的介绍和使用
概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API ...
- Delphi 类的类 class of 用法
http://blog.csdn.net/blue_morning/article/details/8815609 Delphi 类的类 class of 用法 这个概念本来在一个关于Delphi ...
- 【opencv基础】Rect类的神奇用法
前言 最近看github上源码发现对两个cv::Rect使用相与(&)操作,猛地感觉自己蒙啦,Rect类还有这种神奇用法?!翻看opencv官网Rect类,果然如此! opencv中Rect类 ...
- Java文件(io)编程——File类的基本用法
1.首先了解文件流的相关概念: 2.文件File类的基本用法 public class Demo_1 { public static void main(String[] args) { //创建一个 ...
- Java中File类的基本用法
File类的基本用法 java.io.File类:代表文件和目录.在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到此类. File类的常用构造方法:public File(Strin ...
- 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+
1.模板类pair的用法 包含头文件#include<utility> http://blog.csdn.net/laixingjun/article/details/9005200 ...
随机推荐
- Burp Suite抓包工具配置代理手机抓取数据包
工作中很多手机上的问题因为环境差异导致无法在pc设备上完整的模拟真实物理手机,因此需要方法能抓取到手机设备上所有数据包发送详情.发现了这个好用的数据包抓取工具Burp Suite. 一.配置流程: 1 ...
- dedebiz 清理冗余废弃未引用图片方法
原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台admin\sys_sql_query.php代码 在该文件中搜索如下 ...
- Centos7使用s3fs-fuse挂载minio对象存储实践
Centos7使用s3fs-fuse挂载minio对象存储实践 事前准备 主机可以访问到对象存储API.例如minio默认的9000端口 主机安装好s3fs软件 已在minio上创建存储桶 安装s3f ...
- 算法打卡|Day2 数组part02
Day2 数组part02 今日任务:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 目录 Day2 数组part02 今日任务:977.有序数组的平方 ,209.长度最小的 ...
- salesforce零基础学习(一百三十二)Flow新功能: Custom Error
本篇参考: https://help.salesforce.com/s/articleView?id=sf.flow_ref_elements_custom_error.htm&type=5 ...
- Python中的可迭代对象和迭代器
1.可迭代对象 1.1.可迭代对象概念 可迭代对象,最直观的感觉就是可以使用for来循环迭代每一个元素.例如Python内置的类型:str.list.tuple.dict等类型的对象,都是可迭代对象. ...
- 实训——基于大数据Hadoop平台的医疗平台项目实战
文章目录 医疗平台项目描述 数据每列的含义 数据分析业务需求 架构图 成果图 环境搭建 非常感谢各位的认可,最近太多人找我问东问西,故在此进行说明一下: 首先这个是在Linux上基于Hadoop的搭建 ...
- MySQL系列之——错误日志(log_error)、二进制日志(binary logs)、慢日志(slow_log)
文章目录 1.错误日志(log_error) 1.1 作用 1.2 错误日志配置 1.3 日志内容查看 2. binlog(binary logs):二进制日志 ***** 2.1 作用 2.2 bi ...
- Lab3 存储过程与触发器
实验三 存储过程与触发器 实验目的: 学习SQL语言进行编程的基本方法与技术,能够编写存储过程.触发器解决数据库需要处理的复杂问题. 实验内容: 1. 设计一个存储过程或者自定义函数,练习存储 ...
- 基于 P-Tuning v2 进行 ChatGLM2-6B 微调实践
微调类型简介 1. SFT监督微调:适用于在源任务中具有较高性能的模型进行微调,学习率较小.常见任务包括中文实体识别.语言模型训练.UIE模型微调.优点是可以快速适应目标任务,但缺点是可能需要较长的训 ...