方法前面的泛型是什么意思?



我找到了一个基本上看起来像这样的函数:

<R> MyClass<R> functionName(){}

我不知道前面的<R>是什么意思,我也没有通过谷歌搜索找到任何东西。我知道泛型是什么,我只是不知道它们在那个特定位置做什么。

它将允许您编写可以充当任何类型的通用帮助程序方法的方法。

下面是一个反转List实现的内容并将其返回到ArrayList的示例。

List<String> liststr = new ArrayList<>(List.of("A","B","C"));
List<String> reversed = reverse(liststr);
System.out.println(reversed);
List<Integer> listint = new ArrayList<>(List.of(1,2,3,4));
List<Integer> reverseint = reverse(listint);
System.out.println(reverseint);

这是方法。


public static <T>  List<T> reverse(ArrayList<T> list) {
List<T> rev = new ArrayList<>();
for (int i = list.size()-1; i >= 0; i--) {
rev.add(list.get(i));
}
return rev;
}

这本可以用不同的方式完成,但它需要返回值的casting,并且还可能生成runtimecast exception

与所有泛型方法和类一样,类型冲突将在compile time而不是在runtime时解决。

第一种是声明 functionName 将使用泛型,通常我们使用 R 来表示"return",这意味着这个函数将返回一个操作 R 对象的 MyClass 实例。

为了更好地理解,如果函数名称是静态的,则这是一种调用函数名称的方法:

public class AClass{
class MyClass<TYPE>{}
static <R> MyClass<R> functionName(){return null;}
public static void main(String[] args) {
AClass.<String>functionName();
}
}

这意味着 R 是一个变量,它是在执行方法时分配的,可以分配给任何类。 这可能会有所帮助:Java中的泛型是什么?

最新更新