Latest web development tutorials

Java Generics

Java Generics (Generika) ist ein neues Feature in JDK 5 eingeführt, Generika bieten Kompilierung-Prüfmechanismus Typsicherheit, die der Programmierer Typ des erkannten illegal zu kompilieren Zeit ermöglicht.

Die generische Natur der parametrisierte Typ, bedeutet Datentyp, dass der Betrieb als Parameter angegeben wird.

Angenommen, wir haben eine solche Anforderung: schreiben eine Sortiermethode, der fähig ist die Array-Gestaltung, ein Array von Strings oder jede andere Art von Array zu sortieren, wie zu erreichen?

Die Antwort ist , dass Sie Java - Generika verwenden können.

Verwenden Sie Java Generics, können wir eine generische Methode schreiben ein Array von Objekten zu sortieren. Dann rufen Sie die allgemeine Methode, um ein Array von ganzen Zahlen, Punkt-Arrays schwimmen, Strings, Arrays und sortiert.


Generisches Verfahren

Sie können eine generische Methode schreiben, die empfangen werden können, wenn verschiedene Arten von Parametern aufrufen. Um den Parameter Typ generische Methode, der Compiler Deal mit jedem Methodenaufruf aus der Übertragung entsprechend.

Hier sind die Regeln eine generische Methode zu definieren:

  • Alle deklarieren eine generische Methode hat einen Typparameter Deklarationsteil (getrennt durch spitze Klammern), die Typparameter Deklarationsabschnitt vor dem Methodenrückgabetyp (im folgenden Beispiel <E>).
  • Jeder Typ Parameterdeklaration Abschnitt enthält einen oder mehrere Parameter des Typs, die durch Kommas zwischen den Parametern getrennt. Ein generischer Parameter, auch als eine Art variable Kennung bekannt ist, verwendet, um den Namen eines gattungsgemäßen Art anzugeben.
  • Typ-Parameter können verwendet werden, um den Rückgabetyp zu erklären, und kann als ein allgemeiner tatsächlichen Parametertyp Platzhalter erhalten werden.
  • Deklarieren Sie eine generische Methode und andere Methoden, wie Körper. Hinweis Typ, der Typ-Parameter nur einen Referenztyp darstellen kann, nicht eine primitive Art (wie int, double, char, etc.).

Beispiele

Das folgende Beispiel zeigt, wie generische Methoden String verschiedene Druckelemente zu verwenden:

public class GenericMethodTest
{
   // 泛型方法 printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }

    public static void main( String args[] )
    {
        // 创建不同类型数组: Integer, Double 和 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( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组

        System.out.println( "\n双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组

        System.out.println( "\n字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
    } 
}

Kompilieren Sie den obigen Code, die Ergebnisse sind wie folgt:

整型数组元素为:
1 2 3 4 5 

双精度型数组元素为:
1.1 2.2 3.3 4.4 

字符型数组元素为:
H E L L O 

Es begrenzt Typ Parameter:

Es kann vorkommen, werden Sie wollen, zu beschränken, die auf eine Art Typ Parameter des Typs Bereich durchgelassen wird. Zum Beispiel kann wollen eine digitale Betriebsverfahren nur Instanzen von Anzahl oder Anzahl Subklassen zu akzeptieren. Dies ist der Zweck der beschränkten Typ-Parameter.

Um einen beschränkten Typ-Parameter deklarieren, wird der Typ-Parameter Name zuerst genannt, gefolgt von dem Schlüsselwort erstreckt sich schließlich seine obere Grenze gefolgt.

Beispiele

Das folgende Beispiel zeigt die "erweitert" Wie in einem allgemeinen Sinn Sinn zu verwenden "erweitert" (Kategorie) oder "Arbeitsgeräte" (Interface). Das Beispiel einer generischen Methode gibt die maximal drei vergleichbare Objekte.

public class MaximumTest
{
   // 比较三个值并返回最大值
   public static <T extends Comparable<T>> T maximum(T x, T y, T z)
   {                     
      T max = x; // 假设x是初始最大值
      if ( y.compareTo( max ) > 0 ){
         max = y; //y 更大
      }
      if ( z.compareTo( max ) > 0 ){
         max = z; // 现在 z 更大           
      }
      return max; // 返回最大对象
   }
   public static void main( String args[] )
   {
      System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n",
                   3, 4, 5, maximum( 3, 4, 5 ) );
 
      System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n",
                   6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
 
      System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear",
         "apple", "orange", maximum( "pear", "apple", "orange" ) );
   }
}

Kompilieren Sie den obigen Code, die Ergebnisse sind wie folgt:

3, 4 和 5 中最大的数为 5

6.6, 8.8 和 7.7 中最大的数为 8.8

pear, apple 和 orange 中最大的数为 pear

Allgemein Klasse

Ähnliche Erklärungen und Aussagen von nicht-generische Klasse von generischen Klasse, neben dem Klassennamen, hängen Sie den Parameter Typdeklaration Abschnitt.

Und generische Methoden, generische Klasse Typ Parameterdeklaration Abschnitt enthält auch einen oder mehrere Parameter des Typs, die durch Kommas zwischen den Parametern getrennt. Ein generischer Parameter, auch als eine Art variable Kennung bekannt ist, verwendet, um den Namen eines gattungsgemäßen Art anzugeben. Weil sie einen oder mehrere Parameter akzeptieren, werden diese Klassen parametrisierte Klassen oder parametrisierte Typen genannt.

Beispiele

Die folgenden Beispiele zeigen, wie wir eine generische Klasse zu definieren:

public class Box<T> {
   
  private T t;

  public void add(T t) {
    this.t = t;
  }

  public T get() {
    return t;
  }

  public static void main(String[] args) {
    Box<Integer> integerBox = new Box<Integer>();
    Box<String> stringBox = new Box<String>();

    integerBox.add(new Integer(10));
    stringBox.add(new String("本教程"));

    System.out.printf("整型值为 :%d\n\n", integerBox.get());
    System.out.printf("字符串为 :%s\n", stringBox.get());
  }
}

Kompilieren Sie den obigen Code, die Ergebnisse sind wie folgt:

整型值为 :10

字符串为 :本教程