Maison  >  Article  >  Java  >  Tutoriel Java avancé : méthodes génériques

Tutoriel Java avancé : méthodes génériques

黄舟
黄舟original
2016-12-27 11:35:061554parcourir

Vous pouvez écrire une méthode générique qui peut recevoir différents types de paramètres lorsqu'elle est appelée. En fonction des types de paramètres transmis à la méthode générique, le compilateur gère chaque appel de méthode de manière appropriée.

Voici les règles de définition des méthodes génériques :

Toutes les déclarations de méthodes génériques ont une partie de déclaration de paramètre de type (séparée par des crochets angulaires) avant le type de retour de la méthode (dans l'exemple ci-dessous). .

Chaque partie de déclaration de paramètre de type contient un ou plusieurs paramètres de type, séparés par des virgules. Un paramètre générique, également appelé variable de type, est un identifiant qui spécifie le nom d'un type générique.

Les paramètres de type peuvent être utilisés pour déclarer des types de valeurs de retour et peuvent servir d'espaces réservés pour les types de paramètres réels obtenus par des méthodes génériques.

La déclaration du corps de méthode d'une méthode générique est la même que celle des autres méthodes. Notez que les paramètres de type ne peuvent représenter que des types de référence, pas des types primitifs (tels que int, double, char, etc.).

Exemples

L'exemple suivant montre comment utiliser des méthodes génériques pour imprimer des éléments de différentes chaînes :

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

Paramètres de type limité :

Il peut y avoir Il peut y avoir des moments où vous souhaitez limiter la plage de types pouvant être transmis à un paramètre de type. Par exemple, une méthode qui opère sur des nombres peut souhaiter accepter uniquement des instances de Number ou une sous-classe de Number. C'est le but des paramètres de type limité.

Pour déclarer un paramètre de type limité, indiquez d'abord le nom du paramètre de type, suivi du mot-clé extends, et enfin suivi de sa limite supérieure.

Exemples

L'exemple suivant montre comment "extends" est utilisé pour signifier "extends" (classe) ou "impléments" (interface) dans un sens général. La méthode générique de cet exemple renvoie la valeur maximale de trois objets comparables.

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

Ce qui précède est le contenu du didacticiel Java avancé : méthodes génériques. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn