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);
    }
  };
}

springFactoriesLoader内置类的参数解析器类ArgumentResolver

posted @   浪成于微澜之间  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示