Latest web development tutorials

Java Generics

génériques de Java (génériques) est une nouvelle fonctionnalité introduite dans le JDK 5, les médicaments génériques offrent mécanisme de contrôle de sécurité de type à la compilation qui permet au programmeur de compiler à temps le type de l'illégal détecté.

Le caractère générique du type paramétré, le type de données signifie que l'opération est spécifiée en tant que paramètre.

Supposons que nous ayons une telle exigence: écrire une méthode de tri, capable de façonner le tableau, un tableau de chaînes ou de tout autre type de tableau à trier, comment atteindre?

La réponse est que vous pouvez utiliser les génériques Java.

Utiliser Java Generics, on peut écrire une méthode générique pour trier un tableau d'objets. Ensuite, appelez la méthode générique à un tableau d'entiers, virgule flottante des tableaux, des chaînes, des tableaux, et triés.


procédé générique

Vous pouvez écrire une méthode générique qui peut être reçue lors de l'appel de différents types de paramètres. Pour la méthode générique de type de paramètre, l'accord du compilateur avec chaque appel de méthode du transfert appropriée.

Voici les règles pour définir une méthode générique:

  • Tout déclarer une méthode générique a une section de type déclaration de paramètres (séparés par des crochets), la section de déclaration type de paramètre avant le type méthode de retour (dans l'exemple suivant <E>).
  • Chaque section de déclaration de paramètre de type contient un ou plusieurs paramètres de type, séparés par des virgules entre les paramètres. Un paramètre générique, aussi connu comme un identificateur de variable de type est utilisé pour spécifier le nom d'un type générique.
  • Les paramètres de type peuvent être utilisés pour déclarer le type de retour, et peuvent être obtenus en tant que générique réelle type de paramètre espace réservé.
  • Déclarez une méthode générique et d'autres méthodes, comme le corps. Notez que le type type de paramètre ne peut représenter un type de référence, pas un type primitif (comme int, double, char, etc.).

Exemples

L'exemple suivant montre comment utiliser des méthodes génériques différents éléments de chaîne d'impression:

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 ); // 传递一个字符型数组
    } 
}

Compiler le code ci-dessus, les résultats sont les suivants:

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

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

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

Il paramètres de type bornées:

Il peut y avoir des moments que vous voudrez restreindre qui est autorisé à passer à un paramètre de type de type de gamme de type. Par exemple, une méthode numérique de fonctionnement ne peut vouloir accepter les cas de nombre fixe ou sous-classes. Tel est l'objet du paramètre de type borné.

Pour déclarer un paramètre de type borné, le nom du paramètre de type apparaît en premier, suivi par le mot-clé étend enfin suivi sa borne supérieure.

Exemples

L'exemple suivant illustre le "étend" Comment utiliser dans un sens de sens générique "étend" (catégorie) ou «outils» (Interface). L'exemple d'une méthode générique retourne le maximum de trois objets comparables.

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" ) );
   }
}

Compiler le code ci-dessus, les résultats sont les suivants:

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

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

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

classe générique

Des déclarations similaires et les déclarations de classe non générique de classe générique, en plus du nom de la classe, ajoutez la section de déclaration de type de paramètre.

Et les méthodes génériques, section de déclaration de paramètre de type classe générique contient également un ou plusieurs paramètres de type, séparés par des virgules entre les paramètres. Un paramètre générique, aussi connu comme un identificateur de variable de type est utilisé pour spécifier le nom d'un type générique. Parce qu'ils acceptent un ou plusieurs paramètres, ces classes sont appelées classes paramétrées ou types paramétrés.

Exemples

Les exemples suivants montrent comment nous définissons une classe générique:

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());
  }
}

Compiler le code ci-dessus, les résultats sont les suivants:

整型值为 :10

字符串为 :本教程