Guava 中的那些好用的方法
===============
与 Guava 的结缘
与 Guava 的结缘来自于一次和朋友们的技术讨论,朋友们说 Guava 中有很多好用的 API 例如: 断言工具类 Preconditions、字符串工具类 Joiner、Strings、Splitter、CharMatcher 缓存工具类 LoadingCache、异常处理器 Throwables 等众多的好用工具类。
为什么后面喜欢使用 Guava 这套工具了主要还是在 hutool 中踩了很多坑,因此弃暗投明。详情请参考那些因为
fastjson 而熬夜加班升级依赖的 BUG。
Preconditions
Java 断言
Java自1.4版本引入了断言机制。这是一个用于开发和测试阶段的工具,主要用于检查假设的条件,确保代码行为如预期。
public void register(String username) {
assert username.length > 8;
userRegister(username);
}
在上面这段代码中 assert 就是 Java 给我们引入的断言类,显然 Java 自带的断言工具类所提供的功能是比较单一的。当然有一些框架或者工具类也为我们提供了好用的断言工具类 例如 SpringBoot 框架为我们提供的 Assert 工具类
Preconditions
Preconditions 提供了更多的灵活性和功能。它不仅用于开发和测试,还可用于生产环境。Preconditions的方法更加丰富,能够提供更具体的错误信息。
public static void checkArgument(boolean expression, @CheckForNull Object errorMessage) {
if (!expression) {
throw new IllegalArgumentException(String.valueOf(errorMessage));
}
}
public static void checkState(boolean b, String errorMessageTemplate, int p1) {
if (!b) {
throw new IllegalStateException(Strings.lenientFormat(errorMessageTemplate, new Object[]{p1}));
}
}
public static <T> T checkNotNull(@CheckForNull T reference, String errorMessageTemplate, @CheckForNull Object... errorMessageArgs) {
if (reference == null) {
throw new NullPointerException(Strings.lenientFormat(errorMessageTemplate, errorMessageArgs));
} else {
return reference;
}
}
上面是我在源码当中截取的一些方法可以看出确实要比原生的断言类要好用的多。
另外我们除了能够进行参数上的校验之外,还可以进行一些业务上的校验,我们可以把我们自定义的业务校验方法传入到 checkState 中的第一个参数中实现 Preconditions + 业务校验的结合使用。
注意
虽然Preconditions很有用,但也要避免过度使用。不是每个方法或每个参数都需要进行详尽的前置检查。过度使用可能会导致代码臃肿,影响性能。因此,权衡实际需求和性能考虑,选择恰当的场合使用Preconditions。
字符串处理
Joiner 字符串拼接工具类
Joiner,顾名思义,它是用来拼接字符串的。它可以轻松处理null值、添加分隔符,甚至还能用于StringBuilder或输出流。
List<String> strings = Arrays.asList("Rua", null, "A", "B");
String result = Joiner.on(", ").skipNulls().join(strings);
System.out.println(result); // Rua,A,B
Splitter 字符串分割
紧接着是Splitter,它的作用正好与Joiner相反,用来分割字符串。Splitter不仅可以根据指定分隔符进行分割,还能自动去除空格、限制分割结果的数量等。
String input = "a,b,c,d,e";
List<String> result = Splitter.on(',').splitToList(input);
System.out.println(result); // 输出: [a, b, c, d, e]
去除空格
String inputWithSpaces = "a, b , c ,d, e";
List<String> resultWithTrim = Splitter.on(',') .trimResults() .splitToList(inputWithSpaces); System.out.println(resultWithTrim); // 输出: [a, b, c, d, e]
忽略空字符串
String inputWithEmpty = "a,,b,,,c,d,e,,";
List<String> resultOmitEmpty = Splitter.on(',') .omitEmptyStrings() .splitToList(inputWithEmpty);
System.out.println(resultOmitEmpty); // 输出: [a, b, c, d, e]
原文链接: https://juejin.cn/post/7388065349264621579
文章收集整理于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除,如若转载,请注明出处:http://www.cxyroad.com/17428.html