gpt4 book ai didi

Java Generics - 方法声明的区别

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:12 28 4
gpt4 key购买 nike

下面两个方法声明有什么区别:

 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
  • TMyGenericsTest<T> 的类型参数中指定的类(如果你不指定它,它不会工作,因为编译器不会知道 T )

如果改为Stream<R> myFunc(Function<? super T, ? extends R> mapper) , RT不是本地的(方法开头没有 <R, T>),编译器希望它们在类级别定义为 MyGenericsTest<T, R>

关于Java Generics - 方法声明的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761032/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com