O melhor tutorial Genéricos Java em 2024. Neste tutorial você pode aprender método genérico,classe genérica,
A natureza genérica do tipo parametrizado, tipo de dados significa que a operação é especificado como um parâmetro.
Suponha que temos uma tal exigência: escrever um método de triagem, capaz de moldar a matriz, uma matriz de cadeias ou qualquer outro tipo de matriz para classificar, como conseguir?
A resposta é que você pode usar os genéricos Java.
Use Java Generics, podemos escrever um método genérico para classificar uma matriz de objetos. Em seguida, chamar o método genérico para um array de inteiros, matrizes de pontos, strings, matrizes e ordenada flutuante.
Você pode escrever um método genérico que pode ser recebido ao chamar diferentes tipos de parâmetros. Para o método genérico tipo de parâmetro, o negócio compilador com cada chamada de método da transferência de forma adequada.
Aqui estão as regras para definir um método genérico:
O exemplo a seguir demonstra como usar métodos genéricos diferentes elementos de cadeia de impressão:
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 o código acima, os resultados são os seguintes:
整型数组元素为: 1 2 3 4 5 双精度型数组元素为: 1.1 2.2 3.3 4.4 字符型数组元素为: H E L L O
Há parâmetros de tipo delimitadas:
Pode haver momentos em que você vai querer restringir quem tem permissão para passar para um parâmetro de tipo tipo de faixa tipo. Por exemplo, um método digital de operação só pode querer aceitar instâncias de subclasses Número ou número. Este é o propósito do parâmetro de tipo limitada.
Para declarar um parâmetro de tipo limitada, o nome do parâmetro tipo é listado primeiro, seguido pela palavra-chave extends, finalmente seguiu seu limite superior.
O exemplo a seguir demonstra o "estende" Como usar em um sentido sentido genérico "estende" (categoria) ou "instrumentos" (interface). O exemplo de um método genérico retorna os três objectos máximos comparáveis.
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 o código acima, os resultados são os seguintes:
3, 4 和 5 中最大的数为 5 6.6, 8.8 和 7.7 中最大的数为 8.8 pear, apple 和 orange 中最大的数为 pear
declarações similares e declarações de classe não-genérico de classe genérica, além do nome da classe, acrescentar a secção de declaração tipo de parâmetro.
E métodos genéricos, seção de declaração parâmetro de tipo genérico classe também contém um ou mais parâmetros de tipo, separados por vírgulas entre parâmetros. Um parâmetro genérico, também conhecido como um identificador de tipo variável é utilizada para especificar o nome de um tipo genérico. Porque eles aceitam um ou mais parâmetros, essas classes são chamados de classes parametrizadas ou tipos parametrizados.
Os seguintes exemplos demonstram como podemos definir uma classe 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 o código acima, os resultados são os seguintes:
整型值为 :10 字符串为 :本教程