跳至內容

Java/泛型

維基教科書,自由的教學讀本

如果我們可以寫一個單獨的能在一個整型數組,一個字符串數組或者一個任何類型支持排序的數組內排列元素的排序方法將會是很好的。

Java Generic 方法和 generic 類讓程序員可以用一種單獨的方法聲明,一系列有關的方法或者用一個單獨的類聲明來各自指定一系列有關的類型。

Generic 也提供了編譯時類型安全來允許程序員在編譯時捕獲無效的類型。使用 Java Generic 概念,我們可以寫一個泛型方法來給對象數組排序,然後調用帶有整型數組,double 型數組,字符串數組或其他的泛型方法來為數組元素排序。

泛型方法

你可以寫一個單獨的可以被不同類型的參數調用的泛型方法聲明。基於傳給泛型方法的參數類型,編譯器正確處理每個調用的方法。

以下是定義泛型方法的規則:

  1. 所有的泛型方法聲明在方法的返回值之前(下一個例子中的)有一個由尖括號分隔開的類型參數區域。
  2. 類型參數能被用來聲明返回類型和作為傳給泛型方法的參數類型的占位符,就是為人所知的真正的類型參數。
  3. 一個泛型方法的主體像其他方法聲明一樣。注意到類型參數僅能代表引用類型,而不是原始類型(就像 int,double 和 char)。

示例

以下的例子說明了我們可以通過一個通用的方法來打印不同類型的數組:

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
}
}

這將產生以下結果:

Array integerArray contains: 1 2 3 4 5 6

Array doubleArray contains: 1.1 2.2 3.3 4.4

Array characterArray contains: H E L L O