Heim  >  Artikel  >  Java  >  Fortgeschrittenes Java-Tutorial: Generische Methoden

Fortgeschrittenes Java-Tutorial: Generische Methoden

黄舟
黄舟Original
2016-12-27 11:35:061510Durchsuche

Sie können eine generische Methode schreiben, die beim Aufruf verschiedene Parametertypen empfangen kann. Abhängig von den an die generische Methode übergebenen Parametertypen verarbeitet der Compiler jeden Methodenaufruf entsprechend.

Im Folgenden sind die Regeln für die Definition generischer Methoden aufgeführt:

Alle generischen Methodendeklarationen haben einen Typparameter-Deklarationsteil (getrennt durch spitze Klammern) vor dem Methodenrückgabetyp (im Beispiel unten). .

Jeder Typparameter-Deklarationsteil enthält einen oder mehrere Typparameter, getrennt durch Kommas. Ein generischer Parameter, auch Typvariable genannt, ist ein Bezeichner, der den Namen eines generischen Typs angibt.

Typparameter können zur Deklaration von Rückgabewerttypen verwendet werden und als Platzhalter für die tatsächlichen Parametertypen dienen, die von generischen Methoden erhalten werden.

Die Deklaration des Methodenkörpers einer generischen Methode ist die gleiche wie bei anderen Methoden. Beachten Sie, dass Typparameter nur Referenztypen darstellen können, keine primitiven Typen (wie int, double, char usw.).

Beispiele

Das folgende Beispiel zeigt, wie generische Methoden zum Drucken von Elementen verschiedener Zeichenfolgen verwendet werden:

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 = { &#39;H&#39;, &#39;E&#39;, &#39;L&#39;, &#39;L&#39;, &#39;O&#39; };
 
        System.out.println( "Array integerArray contains:" );
        printArray( intArray  ); // 传递一个整型数组
 
        System.out.println( "\nArray doubleArray contains:" );
        printArray( doubleArray ); // 传递一个双精度型数组
 
        System.out.println( "\nArray characterArray contains:" );
        printArray( charArray ); // 传递一个字符型型数组
    } 
}
编译以上代码,运行结果如下所示:
 
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

Begrenzte Typparameter:

Möglicherweise Dies kann vorkommen, wenn Sie den Bereich der Typen begrenzen möchten, die an einen Typparameter übergeben werden dürfen. Beispielsweise möchte eine Methode, die mit Zahlen arbeitet, möglicherweise nur Instanzen von Number oder eine Unterklasse von Number akzeptieren. Das ist der Zweck begrenzter Typparameter.

Um einen begrenzten Typparameter zu deklarieren, listen Sie zunächst den Namen des Typparameters auf, gefolgt vom Schlüsselwort „extends“ und schließlich gefolgt von seiner Obergrenze.

Beispiele

Das folgende Beispiel zeigt, wie „extends“ allgemein für „erweitert“ (Klasse) oder „implementiert“ (Schnittstelle) verwendet wird. Die generische Methode in diesem Beispiel gibt den Maximalwert von drei vergleichbaren Objekten zurück.

public class MaximumTest
{
   // 比较三个值并返回最大值
   public static > 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( "Max of %d, %d and %d is %d\n\n",
                   3, 4, 5, maximum( 3, 4, 5 ) );
  
      System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n\n",
                   6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
  
      System.out.printf( "Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum( "pear", "apple", "orange" ) );
   }
}
编译以上代码,运行结果如下所示:
 
Maximum of 3, 4 and 5 is 5
  
Maximum of 6.6, 8.8 and 7.7 is 8.8
  
Maximum of pear, apple and orange is pear

Das Obige ist der Inhalt des Java Advanced Tutorial: Generische Methoden. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn