作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 java 泛型的新手,我的问题是:
public static < E > void printArray( E[] inputArray )
在上面的语句中,当函数的返回类型为void时,为什么我们在void
之前使用了E
呢?为什么此语法有效?
根据理论,方法本身可以是返回类型吗?
Then suppose E = method_abc then how compiler will manage
public static method_abc void printArray (E[] Array)
我的引用程序是
public class GenericMethodTest
{
// generic method printArray
public static < E > void printArray( E[] inputArray )
{
// Display array elements
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// Create arrays of Integer, Double and Character
Integer[] intArray = { 1, 2, 3, 4, 5 };
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
System.out.println( "Array integerArray contains:" );
printArray( intArray ); // pass an Integer array
System.out.println( "\nArray doubleArray contains:" );
printArray( doubleArray ); // pass a Double array
System.out.println( "\nArray characterArray contains:" );
printArray( charArray ); // pass a Character array
}
}
最佳答案
<E>
这里与返回类型无关;这意味着这是一个通用函数,可以接受各种类型的数组。为了更容易理解,代码可以是这样的:
public class GenericMethodTest
{
// generic method printArray
public static < E > void printArray( E[] inputArray )
{
// Display array elements
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// Create arrays of Integer, Double and Character
Integer[] intArray = { 1, 2, 3, 4, 5 };
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
System.out.println( "Array integerArray contains:" );
GenericMethodTest.<Integer>printArray( intArray ); // pass an Integer array
System.out.println( "\nArray doubleArray contains:" );
GenericMethodTest.<Double>printArray( doubleArray ); // pass a Double array
System.out.println( "\nArray characterArray contains:" );
GenericMethodTest.<Character>printArray( charArray ); // pass a Character array
}
}
那么<E>
又是什么呢?它是否告诉函数 “有一个泛型类型 E
并且你接受 E
的数组,所以如果我用泛型类型 Integer
给你打电话,你接受 Integer[]
。”
虽然它不会改变返回类型。就像public static
不会更改返回类型。
关于Java 泛型 : Syntax Explanation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805550/
我是一名优秀的程序员,十分优秀!