springBoot-番外篇(一)
Duration类
@FunctionalInterface
@FunctionalInterface 是 Java 中的一个注解,用于声明一个接口是一个函数式接口(Functional Interface)。函数式接口是指只包含一个抽象方法的接口。在 Java 8 中引入了函数式编程的特性,其中 lambda 表达式和方法引用是重要的概念。
使用 @FunctionalInterface 注解可以确保接口符合函数式接口的标准。这个注解是可选的,但它有助于提醒开发者保持接口的单一抽象方法的特性,以便在使用 lambda 表达式时能够正确地推断出目标类型。
如果一个接口被 @FunctionalInterface 注解修饰,且接口中包含不止一个抽象方法,编译器会产生一个编译错误,提醒开发者该接口不符合函数式接口的定义
匿名内部类
在获取监听器的时候下面这段代码
ArgumentResolver argumentResolver = ArgumentResolver.of(SpringApplication.class, this);
//ArgumentResolver.of解读
ArgumentResolver本身是一个函数式的接口
static <T> ArgumentResolver of(Class<T> type, T value) {
//() -> value 对于任何一个value类型的变量,只要使用这种写法得到的结果就是一个Java中一个供给型函数(Supplier),其返回值类型可以被推断为 Supplier<T>,其中 T 是 value 的类型。
return ofSupplied(type, () -> value);
}
static <T> ArgumentResolver ofSupplied(Class<T> type, Supplier<T> valueSupplier) {
return from(candidateType -> (candidateType.equals(type) ? valueSupplier.get() : null));
}
static ArgumentResolver from(Function<Class<?>, Object> function) {
//使用匿名内部类来new ArgumentResolver的实例返回
return new ArgumentResolver() {
@SuppressWarnings("unchecked")
@Override
public <T> T resolve(Class<T> type) {
return (T) function.apply(type);
}
};
}

浙公网安备 33010602011771号