今天看到同时写的代码,感觉好简洁,好美观,反观自己的,一言难尽。所以发愤图强,学习一下这种方式。
背景:若依框架搭建的项目
学习目标:学会使用使用lambda表达式的箭头和使用断言类替代if代码块判断
lambda(箭头函数)的学习
这里仅仅是对“->”的学习使用,后续会再补充。
箭头函数应用在:只有一个方法的接口中,用来简化匿名函数的一种方式
// Java 8之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start();
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
省略了“接口名称”、“方法定义”,主要是因为接口中只有一个方法,所以可以省略。
Assert断言类的使用,结合箭头函数
方法说明:
Assert的API链接
notNull(T object, Supplier<X> errorSupplier)
断言对象是否不为null ,如果为null 抛出指定类型异常 并使用指定的函数获取错误信息返回。isNull(Object object, Supplier<X> errorSupplier)
断言对象是否为null ,如果不为null 抛出指定类型异常 并使用指定的函数获取错误信息返回isTrue(boolean expression, Supplier<? extends X> supplier)
断言是否为真,如果为 false 抛出给定的异常noNullElements(T[] array, Supplier<X> errorSupplier)
断言给定数组是否不包含null元素,如果数组为空或 null将被认为不包含 并使用指定的函数获取错误信息返回。notBlank(T text, Supplier<X> errorMsgSupplier)
检查给定字符串是否为空白(null、空串或只包含空白符),为空抛出自定义异常。 并使用指定的函数获取错误信息返回notContain(CharSequence textToSearch, T substring, Supplier<X> errorSupplier)
断言给定字符串是否不被另一个字符串包含(即是否为子串) 并使用指定的函数获取错误信息返回notEmpty(T, Supplier<X> errorSupplier)
T:{数组,集合,字符串,Map}
断言给定数组是否包含元素,数组必须不为 null 且至少包含一个元素 并使用指定的函数获取错误信息返回
若依框架中的使用示例
若依框架中,在service层进行断言类判断,异常使用若依自定义的ServiceException异常类
原始方式(使用匿名内部类)
Assert.notEquals("1", "2", new Supplier<Throwable>() {
@Override
public Throwable get() {
return new ServiceException("两个相等");
}
});
使用箭头函数简化
Assert.notEquals("1", "1", ()->new ServiceException("两个相等"));
出现问题会在控制台报错,并返回给前端页面自定义报错信息。
总结
使用断言类可以简化service层的if判断和controller层的返回结果,简化掉if判断的代码块部分,让代码看的更简洁美观