JAVA语法糖
权限注解 OR
@RequiresPermissions(value = {"m-a", "m-b"}, logical = Logical.OR)
抛出空指针异常
Objects.requireNonNull(element, "没有找到指定的元素");
BeanUtils
BeanUtils.copyProperties(a, b);
【1】a可以有b没有的属性,b也可以有a没有的属性;
【2】a中与b中相同的属性都会被替换,不管是否有值;
【3】a、 b中的属性要名字相同,才能被赋值,不然的话需要手动赋值;
【4】Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法;
【5】如果存在属性完全相同的内部类,但是不是同一个内部类,即分别属于各自的内部类,则spring会认为属性不同,不会copy;
【6】spring 和 apache 的copy属性的方法源和目的参数的位置正好相反,导包和调用的时候都要注意一下。
Java生成随机字符串
org.apache.commons.lang3.RandomStringUtils
Java生成UUID
UUID.randomUUID().toString();
Lambda表达式
@FunctionalInterface // 标注这个接口为函数式接口。对于添加了该注解的方法,如果有多个抽象方法,将会直接报错
interface MyListener {
void doSomething(String name);
default void sayHi(){
}
static void sayHello(){
}
// 虽然函数式接口只能有一个抽象方法,但是不影响有默认方法和静态方法,因为这两种方法不是默认重写的,在Lambda表达式中应用是不会出错的
}
方法引用
如果我们需要的lambda是下面这种形式
((arg1,arg2,...) -> fun(arg1,arg2,...) )
举个例子
arg -> System.out.println(arg)
那么可以考虑直接使用方法引用
out::println(arg)
方法引用共四种类型,这里介绍两个
| 类型 | 示例 |
|---|---|
| 引用静态方法 | ContainingClass::staticMethodName |
| 引用某个对象的实例方法 | containingObject::instanceMethodName |
Optional类
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
// Supplier 供给者 意思是不给它参数,但它给返回值
// 根据Java传参规则,该方法中需传入Supplier的子类
// 根据通配符的含义,在本方法中,Supplier 是 Supplier 的子类
// 本方法参数实际等同于 () -> {...; return t;} t在此处指T的子类对象,下同。
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
// 如果存在则执行
// Comsumer 消费者 意思是给它参数,但它不给返回值
// 本方法参数实际等同于 t -> {...;}
// 注意链式编程一定是前后是同一个对象,且值在全局变量中
public Optional map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
// 映射成另一个Optional
// Function 函数 意思是给它t,它返回u
// 根据泛型函数的定义,此处U采用参数类型推断,因此什么都可以。
// 本方法参数实际等同于 t -> {...; return u;} u在此处指U的子类对象。
public Optional filter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
}
// 过滤出需要的Optional
// Predicate 断言 意思是给它t, 它断言是否正确
// 本方法参数实际等同于 t -> {...; return true/false;}
public Optional flatMap(Function<? super T, Optional> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}
// 给t,返回Optional
// 此处U采取类型推断
public T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
// 不给,返回x。 x此处指X的子类对象。
// X采取类型推断,但声明为,所以X一定是Throwable的子类