Google Guava学习笔记——基础工具类Preconditions类的使用
Preconditions类是一组静态方法用来验证我们代码的状态。Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们使用Preconditions来保证我们代码的行为,并且对调试也非常方便。
当然,你也可以自己写预处理的代码,就像下面一样:
if (someObj == null) { throw new IllegalArgumentException(" someObj must not be null"); }
但使用Preconditions类来处理参数为空的情况,会更加清晰可读:
Preconditions.checkNotNull(label, "Label can't not be null");
下面的类演示了Preconditions类的使用:
package com.guava.felix; import com.google.common.base.Preconditions; public class PreconditionsDemo { private String label; private int[] values = new int[5]; private int currentIndex; public PreconditionsDemo(String label) { this.label = Preconditions.checkNotNull(label, "Label can't not be null"); } public void updateCurrentIndexValue(int index, int valueToSet) { // check index valid first this.currentIndex = Preconditions.checkElementIndex(index, values.length, "Index out of bounds for values."); // validate valueToSet Preconditions.checkArgument(valueToSet <= 100, "Value can't be more than 100"); values[this.currentIndex] = valueToSet; } public void doOperation() { Preconditions.checkState(validateObjectState(), "Can't perform operation."); } private boolean validateObjectState() { return this.label.equalsIgnoreCase("open") && values[this.currentIndex] == 10; } public static void main(String[] args) { PreconditionsDemo demo = new PreconditionsDemo("open"); demo.updateCurrentIndexValue(4, 10); demo.doOperation(); } }
下面是例子中四个方法的总结:
checkNotNull(T object, Object message): object对象不为空的话返回,否则抛出异常。
checkElementIndex(int index, int size, Object message): index表示你要访问的数组,集合,字符串的位置,size表示的是长度,如果 index是有效的则返回,否则抛出异常;
checkArgument(Boolean expression, Object message):这个方法根据传递进来的参数是否满足方法中的逻辑判断,如果符合,返回true,否则抛出异常。
checkStatus(Boolean expression, Object message):这个方法没有参数,它判断一个对象的状态,期望返回true,否则抛出异常。
标签:
Guava
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?