Java Function接口identity方法中Function<T,T>及小写t含义解惑
解析Function.identity()的核心疑问
先把你提到的代码贴出来:
static <T> Function<T, T> identity() { return t -> t; }
1. 返回类型Function<T, T>的含义
Function是Java标准库中的函数式接口,它的定义是interface Function<T, R>,其中:
- 第一个泛型参数
T代表输入参数的类型 - 第二个泛型参数
R代表返回值的类型
所以Function<T, T>就表示:这个函数接收一个T类型的参数,返回一个同类型的T结果——也就是恒等函数,输入什么就原封不动返回什么。
而方法签名里的<T>是泛型声明,说明这个identity方法是泛型方法,T是一个可任意替换的类型占位符,调用时编译器会根据上下文自动推断出具体类型(比如用在Stream.map(Function.identity())时,T就是流中元素的类型)。
2. 小写t的来源
这里的t -> t是Lambda表达式,用来实现Function接口的唯一抽象方法apply(T t)。
Lambda表达式的语法是(参数) -> 表达式,这里省略了参数的括号和类型(编译器可通过上下文自动推断):
- 左边的
t就是apply方法的参数,它的类型对应前面Function<T, T>里的泛型T,不需要显式写(T t) - 右边的
t就是直接返回这个参数本身,完全符合Function<T, T>的返回值要求
简单说,这个Lambda就是把Function的apply方法实现为:接收一个t,返回t,完美匹配Function<T, T>的定义。
内容的提问来源于stack exchange,提问作者stardep
相关产品推荐
相关产品推荐

