java这个返回类型中 <T> 是什么意思 ?

作者站长头像
站长
· 阅读数 12

java这个返回类型中 <T> 是什么意思 ?

返回类型如果为 Predicate<T> 那我看得懂 ,但是前面 还有 一个 <T> , 是什么意思 ?

回复
1个回答
avatar
test
2024-07-13

这个是Java泛型方法返回值的语法,需要在返回类型前声明自己所使用的泛型类型。

下面解释为什么isEqual需要写前面的<T>而图片上面的or方法不需要:

Predicate类本身是一个泛型类,在声明时使用了Predicate<T>

or的签名为default Predicate<T> or(Predicate<? super T> other),这是一个成员函数,这里的T和类的T是同一个类型。在类被实例化后,T拥有了具体的类型(假设是T1),在这个实例上调用成员函数,成员函数or返回值的类型也就确定了是Precicate<T1>

但由于isEqual是类方法,它无法获取到类Predicate<T>中的类型T,所以这个T是一个新的类型,只是恰好和类名称Predicate<T>中的T名字相同。如果不声明<T>,编译器会抱怨不知道Predicate<T>中的T是什么。

事实上,即使是成员方法,也可以在返回值前面添加<T>来覆盖泛型类的泛型类型T,例如可以声明 default <T> Predicate<T> or(Predicate<? super T> other)。(当然这种情况下最好使用另一个类型标识符)

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容