我发现了一个基本上像这样的函数:
<R> MyClass<R> functionName(){}
我不知道前面的<R>
是什么意思,我没有真正通过谷歌搜索找到任何东西。我知道泛型是什么,我只是不知道它们在那个特定位置的作用。
答案 0 :(得分:3)
它将允许您编写可用作任何类型的通用辅助方法的方法。
这里是一个反转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
,并且还可能生成runtime
cast exception
。
与所有通用方法和类一样,类型冲突将在compile time
而不是runtime
处解决。
答案 1 :(得分:2)
第一种是声明functionName将使用泛型,通常我们使用R来表示“返回”,这意味着该函数将返回操作R对象的MyClass实例。
为了更好地理解,如果是静态的,这是一种调用functionName的方法:
node index.js
答案 2 :(得分:1)
这意味着R是一个变量,该变量在执行该方法时分配,并且可以分配给任何类。 这可能会有所帮助:What are Generics in Java?