Latest web development tutorials

Los genéricos de Java

genéricos de Java (genéricos) es una nueva característica introducida en JDK 5, los genéricos proporcionan pruebas de seguridad mecanismo de tipo en tiempo de compilación que permite al programador de tiempo de compilación tipo de la ilegal detectada.

El carácter genérico de la tipo parametrizado, tipo de datos significa que la operación se especifica como un parámetro.

Supongamos que tenemos un requisito: escribir un método de clasificación, capaz de dar forma a la matriz, una matriz de cadenas o cualquier otro tipo de matriz para clasificar, la forma de lograr?

La respuesta es que se puede utilizar genéricos de Java.

El uso de Java Generics, podemos escribir un método genérico para ordenar una matriz de objetos. A continuación, llame al método genérico para una matriz de enteros, las matrices de puntos, cadenas, matrices y ordenada flotante.


método Genérico

Se puede escribir un método genérico que puede ser recibida cuando se llama a diferentes tipos de parámetros. Para el método genérico tipo de parámetro, el acuerdo compilador con cada llamada al método de la transferencia apropiada.

Estas son las reglas para definir un método genérico:

  • Todo declarar un método genérico tiene una sección tipo de declaración de parámetros (separados por paréntesis angulares), la sección de declaración parámetro de tipo antes de que el método de tipo de retorno (en el ejemplo siguiente <E>).
  • Cada sección de declaración de parámetros de tipos contiene uno o más parámetros de tipo, separados por comas entre los parámetros. Un parámetro genérico, también conocido como un identificador de variable de tipo se utiliza para especificar el nombre de un tipo genérico.
  • Los parámetros de tipo pueden utilizarse para declarar el tipo de retorno, y se pueden obtener como un marcador de posición Tipo de parámetro real genérico.
  • Declarar un método genérico y otros métodos, como el cuerpo. Tenga en cuenta que el tipo de parámetro de tipo sólo puede representar un tipo de referencia, no un tipo primitivo (como int, double, char, etc.).

Ejemplos

El siguiente ejemplo muestra cómo utilizar métodos genéricos diferentes elementos de la cadena de impresión:

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

Compilar el código anterior, los resultados son los siguientes:

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

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

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

Hay parámetros de tipo delimitadas:

Puede haber ocasiones en que se desea restringir que se permite pasar a un parámetro de tipo de tipo de tipo gama. Por ejemplo, un sistema digital de operación sólo puede querer aceptar las instancias de Number o Número de subclases. Este es el propósito de parámetro de tipo acotada.

Para declarar un parámetro de tipo limitado, el nombre del parámetro tipo aparece primero, seguido de la palabra clave se extiende, por último siguió su límite superior.

Ejemplos

El siguiente ejemplo demuestra la "extiende" Cómo utilizar en un sentido genérico sentido "se extiende" (categoría) o "instrumentos" (interfaz). El ejemplo de un método genérico devuelve los máximos de tres objetos 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" ) );
   }
}

Compilar el código anterior, los resultados son los siguientes:

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

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

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

clases genéricas

Declaraciones similares y declaraciones de clase no genérica de la clase genérica, además del nombre de la clase, agregue la sección de declaración de tipo de parámetro.

Y métodos genéricos, sección de declaración de parámetro de tipo de clase genérica también contiene uno o más parámetros de tipo, separados por comas entre los parámetros. Un parámetro genérico, también conocido como un identificador de variable de tipo se utiliza para especificar el nombre de un tipo genérico. Porque aceptan uno o más parámetros, estas clases se llaman clases o tipos parametrizados con parámetros.

Ejemplos

Los siguientes ejemplos demuestran cómo definimos una clase genérica:

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

Compilar el código anterior, los resultados son los siguientes:

整型值为 :10

字符串为 :本教程