有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我发现一个函数基本上如下所示:

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

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


共 (3) 个答案

  1. # 1 楼答案

    它将允许您编写可以作为任何类型的通用帮助器方法的方法

    下面是一个反转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{}

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

  2. # 2 楼答案

    这意味着R是一个变量,在执行方法时分配,可以分配给任何类。 这可能会有帮助:What are Generics in Java?

  3. # 3 楼答案

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

    为了更好地理解,这是一种在functionName为静态时调用functionName的方法:

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