Java泛型-方法声明的差异

pawinder gupta

以下两个方法声明之间有什么区别:

 1. <R> Stream<R> myFunc(Function<? super T, ? extends R> mapper);    
 2. Stream<R> myFunc(Function<? super T, ? extends R> mapper);

为了编译第二个声明,我需要向此类添加类型参数。

public class MyGenericsTest<T, R>

在这种情况下,编译器将确保在编译时确定myFunc的返回类型。编译器也可以从方法签名中得知这一点。我对为什么编译器将这两个声明区别对待感到困惑。

奥蒂斯

通过编写,<R> Stream<R> myFunc(Function<? super T, ? extends R> mapper)您告诉编译器:

  • R是任何类,并且是方法的局部变量(以开头<R>开头)
  • 返回类型是StreamR
  • T是在的type参数中指定的类MyGenericsTest<T>(如果您不指定它,它将无法工作,因为编译器将不知道T

如果更改为Stream<R> myFunc(Function<? super T, ? extends R> mapper)R并且T不是局部的(<R, T>在方法的开始处为),并且编译器希望它们在类级别定义为MyGenericsTest<T, R>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章