Latest web development tutorials

Generics Java

generici Java (generici) è una nuova funzionalità introdotta in JDK 5, generici forniscono a tempo di compilazione meccanismo di test di sicurezza tipo che permette al programmatore di compilazione tempo tipo di illegale rilevato.

La natura generica del tipo parametrico, il tipo di dati significa che l'operazione è specificato come parametro.

Supponiamo di avere un tale requisito: scrivere un metodo di ordinamento, in grado di plasmare l'array, un array di stringhe o di qualsiasi altro tipo di array per ordinare, come raggiungere?

La risposta è che è possibile utilizzare farmaci generici Java.

Usare Java Generics, siamo in grado di scrivere un metodo generico per ordinare un array di oggetti. Poi, chiamare il metodo generico per un array di interi, array di punti, stringhe, array e ordinato galleggiante.


metodo generico

È possibile scrivere un metodo generico che può essere ricevuto al momento della chiamata diversi tipi di parametri. Per il metodo generico tipo di parametro, l'affare compilatore con ogni chiamata di metodo dal trasferimento in modo appropriato.

Ecco le regole per definire un metodo generico:

  • Tutto dichiarare un metodo generico ha una sezione di tipo dichiarazione di parametro (separati da parentesi angolari), la sezione di dichiarazione parametro di tipo prima che il tipo di metodo di ritorno (nel seguente esempio <E>).
  • Ogni sezione di dichiarazione parametro di tipo contiene uno o più parametri di tipo, separati da virgole tra i parametri. Un parametro generico, noto anche come un identificatore di tipo variabile è usata per specificare il nome di un tipo generico.
  • parametri di tipo possono essere utilizzati per dichiarare il tipo restituito, e possono essere ottenuti come un generico reale tipo di parametro segnaposto.
  • Dichiarare un metodo generico e altri metodi, come il corpo. Si noti che tipo di parametro di tipo può rappresentare solo un tipo di riferimento, non è un tipo primitivo (come int, double, char, ecc).

Esempi

L'esempio seguente mostra come utilizzare metodi generici diversi elementi stringa di stampa:

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

Compilare il codice sopra, i risultati sono i seguenti:

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

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

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

Ci parametri di tipo delimitate:

Ci possono essere momenti si desidera limitare chi è autorizzato a passare ad un parametro di tipo sorta di campo di tipo. Ad esempio, un sistema digitale di funzionamento può essere utile solo ad accettare le istanze di numero o sottoclassi. Questo è lo scopo del parametro di tipo limitato.

Per dichiarare un parametro di tipo limitato, il tipo di nome del parametro è nominata per prima, seguita dalla parola chiave extends, infine, ha seguito il suo limite superiore.

Esempi

L'esempio seguente mostra la (categoria) "si estende" Come utilizzare in un senso senso generico "estende" o "strumenti" (interfaccia). L'esempio di un metodo generico restituisce tre oggetti massime comparabili.

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

Compilare il codice sopra, i risultati sono i seguenti:

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

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

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

classe generica

dichiarazioni simili e le dichiarazioni di classe non generica della classe generica, oltre al nome della classe, aggiungere la sezione dichiarazione del tipo di parametro.

E metodi generici, tipo di classe sezione di dichiarazione parametro generico contiene anche uno o più parametri di tipo, separati da virgole tra i parametri. Un parametro generico, noto anche come un identificatore di tipo variabile è usata per specificare il nome di un tipo generico. Perché accettano uno o più parametri, queste classi sono chiamate classi parametrizzate o tipi parametrizzati.

Esempi

I seguenti esempi dimostrano come si definisce una classe generica:

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

Compilare il codice sopra, i risultati sono i seguenti:

整型值为 :10

字符串为 :本教程