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】springapache 的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的子类