Guava Preconditions类的各种用法

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

前置依赖

引入 pom

xml 复制代码
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>32.1.3-jre</version>
</dependency>

checkArgument

Preconditions类的checkArgument方法用于校验传递给调用方法的参数的正确性。该方法接收一个布尔条件,当条件为false时,抛出IllegalArgumentException异常。 让我们通过一些示例来看看如何使用这个方法。

java 复制代码
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异常,参数不符合条件
    }
}

抛出带有模板的错误信息

java 复制代码
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异常

java 复制代码
   @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方法的使用:

java 复制代码
  @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方法的使用:

java 复制代码
  @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类提供了静态方法的集合,用于验证参数是否有效。

代码地址:github.com/dongweizhao...

相关推荐
请你打开电视看看1 分钟前
观察者模式
java·观察者模式·设计模式
Mr.朱鹏4 分钟前
设计模式之策略模式-工作实战总结与实现
java·spring·设计模式·kafka·maven·策略模式·springbbot
计算机毕设指导67 分钟前
基于SpringBoot共享汽车管理系统【附源码】
java·spring boot·后端·mysql·spring·汽车·intellij idea
春风十里不如你95271 小时前
【设计模式】【行为型模式(Behavioral Patterns)】之责任链模式(Chain of Responsibility Pattern)
java·设计模式·责任链模式
小宋10211 小时前
实现Excel文件和其他文件导出为压缩包,并导入
java·javascript·excel·etl
guihong0041 小时前
JAVA面试题、八股文学习之JVM篇
java·jvm·学习
QQ_1154320311 小时前
基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现九
java·spring boot·mysql·毕业设计·毕业源码·竞拍系统·竞拍项目
醉颜凉1 小时前
计算(a+b)/c的值
java·c语言·数据结构·c++·算法
周杰伦fans1 小时前
Java与C#
java·开发语言·c#