优雅的参数校验——Guava库中的Preconditions

Guava库中的Preconditions类提供了一些静态方法,用于在程序中执行参数的检查和验证。这些方法在编写健壮和可维护的代码时非常有用

  1. checkArgument(boolean expression)

    • 作用:用于验证方法的参数是否满足某个条件。如果条件不满足,则抛出IllegalArgumentException
    • 示例
      int age = -1;
      Preconditions.checkArgument(age > 0, "Age must be positive");
      
    • 说明:如果age不大于0,就会抛出IllegalArgumentException,并显示消息“Age must be positive”。
  2. checkNotNull(T reference)

    • 作用:用于验证方法的参数是否为null。如果参数为null,则抛出NullPointerException
    • 示例
      String name = null;
      Preconditions.checkNotNull(name, "Name cannot be null");
      
    • 说明:如果namenull,就会抛出NullPointerException,并显示消息“Name cannot be null”。
  3. checkState(boolean expression)

    • 作用:用于验证对象的状态是否满足某个条件。如果条件不满足,则抛出IllegalStateException
    • 示例
      boolean isStarted = false;
      Preconditions.checkState(isStarted, "The service has not been started yet");
      
    • 说明:如果isStartedfalse,就会抛出IllegalStateException,并显示消息“The service has not been started yet”。
  4. checkElementIndex(int index, int size)

    • 作用:用于验证集合的索引是否有效。如果索引无效,则抛出IndexOutOfBoundsException
    • 示例
      int index = 5;
      int size = 3;
      Preconditions.checkElementIndex(index, size, "Index out of bounds");
      
    • 说明:如果index不在有效范围内(0到size-1),就会抛出IndexOutOfBoundsException,并显示消息“Index out of bounds”。
  5. checkPositionIndex(int index, int size)

    • 作用:用于验证集合的插入位置是否有效。如果位置无效,则抛出IndexOutOfBoundsException
    • 示例
      int position = 4;
      int size = 3;
      Preconditions.checkPositionIndex(position, size, "Position out of bounds");
      
    • 说明:如果position不在有效范围内(0到size),就会抛出IndexOutOfBoundsException,并显示消息“Position out of bounds”。
  6. checkPositionIndexes(int start, int end, int size)

    • 作用:用于验证集合的子区间(子列表)是否有效。如果区间无效,则抛出IndexOutOfBoundsException
    • 示例
      int start = 2;
      int end = 5;
      int size = 4;
      Preconditions.checkPositionIndexes(start, end, size, "Invalid sublist range");
      
    • 说明:如果startend不在有效范围内(0到size),或者start大于end,就会抛出IndexOutOfBoundsException,并显示消息“Invalid sublist range”。

这些Preconditions方法在代码中提供了一种简洁而一致的方式来进行参数和状态检查,从而有助于编写更加健壮的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rancher快照备份至S3

巧用rancher的S3快照备份功能,快速实现集群复制、集群转移、完全崩溃后的极限修复 1.进入集群管理,在对应的集群菜单后,点击编辑配置 2.选择ETCD,启用,Backup Snapshots to S3选项 并填入你的minio 3 配置成功后 手…

使用adb shell getprop命令获取Android设备的属性

常用属性获取: adb shell getprop ro.build.version.emui —查询EMUI版本 adb shell getprop ro.product.brand —查询手机品牌 adb shell getprop ro.product.name --查询设备名称 adb shell getprop ro.serialno —查询设备序列号 获取手机系统信息( CPU,厂商…

C# 信号量的使用

学习来源:《.net core 底层入门》 第六章第9节:信号量 案例:主线程负责添加数据,子线程负责获取数据 使用SemaphoreSlim(轻信号量)实现: using System; using System.Collections.Generic; us…

python中的<class ‘complex‘>

一般编程里面不怎么会讲&#xff0c;但是还是挺强大的一个类。 在 Python 中&#xff0c;<class complex> 表示复数类型。复数是一种包含实部和虚部的数学数&#xff0c;可以用 a bj 的形式表示&#xff0c;其中 a 表示实部&#xff0c;b 表示虚部&#xff0c;j 是虚数…

bat脚本暂停写法

使用 timeout 命令来实现暂停&#xff1a; timeout /t 1 /nobreak >nul/t &#xff1a;指定暂停的时间&#xff0c;单位为秒。/nobreak&#xff1a;防止用户按任意键终止暂停。

13 物理层介质及设备

物理层介质及设备 一、线缆的连接 &#xff08;一&#xff09;线序 ​ 线序&#xff1a; RJ-45连接头12345678568A绿白绿橙白蓝蓝白橙棕白棕568B橙白橙绿白蓝蓝白绿棕白棕 ​ 1、2发送&#xff0c;3、6接收 &#xff08;二&#xff09;线缆的应用 1.线缆的连接 ​ 标准…

Spring自定义标签体系和应用

我们知道&#xff0c;在使用Dubbo框架时&#xff0c;需要指定配置文件中的application、protocol、registry、provider、service等服务器端和客户端的配置项&#xff0c;典型的配置方法如下所示。通过这些配置项&#xff0c;我们可以基于Spring容器来启动Dubbo服务。 <!-- …

【2024.6.23】今日科技时事:科技前沿大事件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

常用原语介绍

1.在Xilinx的example&#xff08;wavegen example&#xff09;中看到他们的顶层模块的输入输出管脚都手动例化原语IBUF以及OBUF——工具也会自动给我们加上不必要自己加 2.非mrcc个srcc的管脚输入的时钟信号&#xff0c;无法进入mmcm————试验过会报错 3.实际上&#xff0…

探索PHP中的函数

在PHP编程中&#xff0c;函数是一个非常重要的概念。函数可以帮助我们将代码组织成可重复使用的块&#xff0c;从而提高代码的可读性和可维护性。本文将介绍PHP中的函数&#xff0c;包括函数的定义、参数传递、返回值、内置函数和自定义函数等内容&#xff0c;帮助读者更好地理…

WPF 深入理解八、Binding 绑定

Binding 创建一个Demo 1 1.创建三个输入框&#xff0c;按钮 2.为按钮创建点击方法 3.点击按钮 三个输入框&#xff0c;分别更新了自己的内容。 上面的展示&#xff0c;是一个传统的模式&#xff0c;事件驱动程序&#xff0c;通过事件来变更UI控件元素的内容。 示例二 创建…

OS_虚拟机

2024.06.21&#xff1a;操作系统虚拟机学习笔记 第4节 虚拟机 4.1 虚拟机基本概念4.2 一型虚拟机管理程序4.3 二型虚拟机管理程序4.4 用户态与内核态 本节的主要内容就是来分辨两种不同的虚拟机管理程序 4.1 虚拟机基本概念 利用虚拟化技术&#xff0c;把一台物理机器虚拟成多…

2024年在WordPress中创建销售活动的入门级优惠券方法

2024年在WordPress中创建销售活动的入门级优惠券方法 今天我想和大家分享一些关于如何在WordPress网站上创建销售活动的经验。无论你是电商新手还是已经有一定经验的店主&#xff0c;优惠券都是吸引顾客、增加销量的有力工具。在这篇文章中&#xff0c;我将介绍三款适合初学者…

链轮简单认识一下

今天咱们聊的话题是——链轮&#xff0c;这个应用非常广泛的机械零件。 什么是链轮&#xff1f; 链轮是一种带有齿或尖刺的机械轮&#xff0c;用于与链条或皮带啮合&#xff0c;以促使“轮子”的旋转和运动。这种啮合可确保同步运动&#xff0c;使链轮和皮带能够高效地协同运行…

数据赋能(129)——体系:数据标准化——实施过程、应用特点

实施过程 数据标准化的实施过程通常涉及以下几个关键步骤&#xff1a; 需求分析与计划制定&#xff1a; 在进行数据标准化之前&#xff0c;首先要明确标准化的目标和需求。制定详细的实施计划&#xff0c;包括时间表、资源分配和预期成果。数据收集&#xff1a; 收集需要进行…

Linux-磁盘管理与文件系统

目录 一、磁盘结构 1、磁盘的物理结构 2、磁盘的数据结构 3、磁盘存储容量 4、接口类型 二、磁盘分区 1、磁盘的两种分区方式 1.1、MBR分区 1.2、GPT分区 三、查看硬盘的分区情况 1、Fdisk—查询磁盘设备 2、lsblk—以树形查看磁盘分区 3、blkid—查看磁盘的UUID …

客服系统接入coze扣子机器人 实现了知识库问答,以及文生图功能

我发布的抖音视频 https://www.douyin.com/video/7383347226967362826 【视频标题&#xff1a;】 客服系统接入coze扣子机器人 实现了知识库问答&#xff0c;以及文生图功能 #coze 【视频行业分类&#xff1a;】 3C数码 【视频文案】&#xff1a; 我们现在看一下客服系统对接了…

Elasticsearch的快照

ES的快照是什么&#xff1f; snapshot是一个ES集群或者某个指定索引的备份&#xff0c;快照一般用在 不停机的状态下对ES集群进行备份当硬件故障时恢复集群数据用于跨集群的数据迁移对冷数据或冻结数据做快照以降低存储成本&#xff0c;依赖于可搜索的快照。-收费功能 一个快…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

基于SSM+Vue的宠物领养平台系统(带1w+文档)

基于SSMVue的宠物领养平台系统(带1w文档) 本课题研究和开发同城宠物帮管理系统&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高同城宠物帮信息处理速度&#xff0c;规范同城宠物帮信息处理流程&#xff0c;让管理人员的产出效益更高。 项目简介 基…