博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Guava 常用工具类
阅读量:4219 次
发布时间:2019-05-26

本文共 3344 字,大约阅读时间需要 11 分钟。

引入guava包:

com.google.guava
guava
11.0.2
1、Preconditions 前置校验
前置条件适用于当判断与设置的条件不符合时,
抛出异常的操作。(注意: 是抛出异常,对于那些想在判空时做相应的处理可以用jdk8中的Optional)
下面给出:
1)对象判空,抛出异常
2)List对象判空,抛出异常
3)数字类型条件判断,抛出异常
public class PreconditionsExample {    public static void main(String[] args) {        /**         * 对象判空处理         */        UserInfo userInfo = null;        Preconditions.checkNotNull(userInfo, "userInfo不能为null");        /**         * List对象判空处理         */        List
list = Lists.newArrayList(); Preconditions.checkNotNull(list, "传入的list不能为null"); /** * 数值类型判断处理 */ Long projectId = -12L; Preconditions.checkNotNull(projectId, "projectId不能为null"); Preconditions.checkArgument(projectId > 0, "输入projectId必须大于0", projectId); } class UserInfo{ private String name; }}
利用Otpinal来对返回的单个对象进行包装(注意:所有的对象都要封装)
下面的例子中,判断UserInfo是否为null,以及对于Long类型如果为null,比如,前段没有传递该参数则,此时可以将其设置为0。
@Slf4jpublic class OptionalExample {    public static void main(String[] args) {        Optional
userInfo = Optional.ofNullable(getUserInfo()); if (!userInfo.isPresent()){ log.info("userInfo is null"); } Optional
projectIdOptional = Optional.ofNullable(getProjectId()); Long projectId = projectIdOptional.orElse(0L); // 如果projectId为null时,这值为0 } public static UserInfo getUserInfo() { return null; } public static Long getProjectId() { return null; } @Getter @Setter class UserInfo{ private String userName; }}
2、retryer实现接口重试机制
在日常开发中,经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般是不靠谱的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候需要使用失败重试调用API接口来获取。
(1)需要再引入guava-retrying包:
com.github.rholder
guava-retrying
2.0.0
(2)实现代码示例如下:
@Slf4jpublic class RetryerExample {    public static void main(String[] args) throws Exception {        Retryer
retryer = RetryerBuilder.
newBuilder() .retryIfResult(Predicates.
isNull()) // 设置自定义段元重试源 .retryIfExceptionOfType(Exception.class) // 设置异常重试源 .retryIfRuntimeException() // 设置异常重试源 .withStopStrategy(StopStrategies.stopAfterAttempt(5)) // 设置重试次数 设置重试超时时间???? .withWaitStrategy(WaitStrategies.fixedWait(5L, TimeUnit.SECONDS)) // 设置每次重试间隔 .build(); Callable
task = new Callable
() { int i = 0; @Override public Boolean call() throws Exception { i++; log.info("第{}次执行!", i); if (i<3) { log.info("模拟执行失败"); throw new IOException("异常"); } return true; } }; try { retryer.call(task); } catch (ExecutionException e) { log.error("error", e); } catch (RetryException e) { log.error("error", e); } Boolean result = task.call(); log.info("成功输出结果:{}", result); } }
分析:
上述中方法调用失败了三次,在重试第4次之后,成功返回数据。
3、本地内存 Guava Cache
缓存有分布式缓存和本地缓存,这里主要介绍Google中的Guava工具包中实现的本地缓存工具类,能够有效的控制缓存的策略。

转载地址:http://mgomi.baihongyu.com/

你可能感兴趣的文章
QT下多线程调用TCP的问题及可能的解决方案
查看>>
2020-12-17
查看>>
STM32F207和DM9161A的以太网实现方案
查看>>
STM32以太网通讯设计方案
查看>>
深入理解线程和线程池(图文详解)
查看>>
线程池多任务的执行顺序
查看>>
SQLite3 文件锁和并发
查看>>
sqlite并发访问
查看>>
高频访问SQLite数据库
查看>>
FreeRTOS与uCOS II的比较(嵌入式实时系统)
查看>>
RT-Thread相比较于Freertos的优势在哪里
查看>>
FreeRTOS 内存 Heap管理
查看>>
[windows] 无拓展名文件设置默认打开方式
查看>>
修改特定扩展名文件的默认打开程序
查看>>
sprintf,sprintf_s,_snprintf和_snprintf_s之间的区别
查看>>
fseek与rewind到底有何区别
查看>>
把STM32F103的工程移植到F105或F107
查看>>
COW同步机制解析
查看>>
XSKY解读FAST‘20 论文 《关于如何高效率的对文件目录树进行快速克隆操作》
查看>>
littlefs系列:metadata pairs
查看>>