DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

1

Métodos genéricos

  • Métodos de uma classe genérica usam automaticamente o parâmetro de tipo da classe.

  • É possível declarar métodos genéricos que têm seus próprios parâmetros de tipo, independentemente da classe.

  • Métodos genéricos podem ser criados dentro de classes não genéricas.

  • O exemplo apresentado inclui uma classe não genérica chamada GenericMethodDemo com um método genérico estático, arraysEqual().

  • O método arraysEqual() compara dois arrays para verificar se possuem os mesmos elementos, na mesma ordem, desde que sejam de tipos compatíveis e comparáveis.

// Demonstra um método genérico simples.
class GenericMethodDemo {
// Determina se o conteúdo de dois arrays é igual.
static <T extends Comparable<T>, V extends T> boolean
arraysEqual(T[] x, V[] y) { // Método genérico
// Se o tamanho dos arrays for diferente, os arrays também serão.
if(x.length != y.length) return false;
for(int i=0; i < x.length; i++)
if(!x[i].equals(y[i])) return false; // os arrays são diferentes
return true; // os conteúdos dos arrays são equivalentes
}
public static void main(String args[]) {
Integer nums[] = { 1, 2, 3, 4, 5 };
Integer nums2[] = { 1, 2, 3, 4, 5 };
Integer nums3[] = { 1, 2, 7, 4, 5 };
Integer nums4[] = { 1, 2, 7, 4, 5, 6 };
if(arraysEqual(nums, nums))
System.out.println("nums equals nums");
//Os argumentos de tipo de T e V são determinados implicitamente quando o método é chamado.
if(arraysEqual(nums, nums2))
System.out.println("nums equals nums2");
if(arraysEqual(nums, nums3))
System.out.println("nums equals nums3");
if(arraysEqual(nums, nums4))
System.out.println("nums equals nums4");
// Cria um array de Doubles
Double dvals[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
// Essa parte não será compilada, porque nums
// e dvals não são do mesmo tipo.
// if(arraysEqual(nums, dvals))
// System.out.println("nums equals dvals");
}
}

  • Observe como ele é declarado pela linha a seguir:
    static <T extends Comparable<T>, V extends T> boolean arraysEqual(T[] x, V[] y) {

  • Parâmetros de tipo no método genérico: São declarados antes do tipo de retorno do método.

  • Uso de limites superiores: O parâmetro de tipo T estende Comparable, garantindo que apenas objetos comparáveis sejam usados.

  • Relacionamento entre tipos: O parâmetro V tem como limite superior T, forçando compatibilidade entre os argumentos do método.

  • Métodos genéricos podem ser estáticos ou não: Não há restrições quanto à declaração de métodos genéricos como estáticos.

  • Inferência de tipos: Os tipos dos argumentos de um método genérico são detectados automaticamente durante a chamada, ajustando os parâmetros de tipo conforme necessário.

  • Exemplo de erro de tipo: A comparação entre arrays de tipos incompatíveis (como Integer e Double) resulta em erro de compilação devido à restrição de compatibilidade imposta pelo limite superior.

  • Sintaxe de método genérico:
    <lista-parâm-tipo> tipo-ret nome-mét(lista-parâm) { // ...

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs