【问题标题】:Return Type of Java Generic MethodsJava 泛型方法的返回类型
【发布时间】:2012-07-07 17:39:10
【问题描述】:

我想知道为什么不返回任何 void 的泛型方法是(或可以)这样声明的:

   public static <E> void printArray( E[] inputArray ) {
     // Display array elements              
     for ( E element : inputArray ){        
        System.out.printf( "%s ", element );
     }
     System.out.println();
   }

看起来&lt;E&gt; 是返回对象的类型,但该方法实际上什么也没返回。那么&lt;E&gt;在这种情况下具体和泛型方法中的真正含义是什么?

【问题讨论】:

    标签: java generics methods return-value enumeration


    【解决方案1】:

    这个问题适合我的一个旧笔记。我希望这个插图对您有所帮助:

    【讨论】:

    • 很好的答案 + 1,可能值得一提的是,在您的第一种方法中,您可以使用 Void(大写“V”)作为返回类型 T...虽然 'y' 必须有一个 null价值
    • 补充回答,如果可以从类类型推断出类型,则方法中不需要。
    • 我不会投反对票,但就格式而言,这是一个垃圾答案——不可搜索、不可复制等。
    • 很好的答案和很好的解释。
    • 很好的解释。
    【解决方案2】:

    &lt;E&gt; 是泛型类型参数声明。意思是“这个方法只有一个类型参数,叫做E,可以是任何类型”。

    它不是返回类型——它出现在类型参数声明之后,就在方法名称之前。所以你问题中printArray方法的返回类型还是void

    有关方法声明的更多详细信息,请参阅section 8.4 of the JLS

    【讨论】:

      【解决方案3】:

      不是返回对象的类型。它表示方法签名中的E 是泛型类型而不是具体类型。没有它,编译器会为方法的参数寻找一个名为 E 的类。

      【讨论】:

        【解决方案4】:

        被称为形式类型参数。它不是方法的返回类型。它基本上说该方法可以接受不同类型的参数数组(E[] inputArray)。

        【讨论】:

          【解决方案5】:

          E 用作在 Gen 函数调用时将传递给 Gen 函数的实际类型的占位符。

          假设 E 可以替换为 整数

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-11
            • 2016-12-24
            • 1970-01-01
            • 2015-05-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多