Java Generics (com exemplos)

Neste tutorial, aprenderemos sobre Java Generics, como criar classes e métodos genéricos e suas vantagens com a ajuda de exemplos.

O Java Generics nos permite criar uma única classe, interface e método que pode ser usado com diferentes tipos de dados (objetos).

Isso nos ajuda a reutilizar nosso código.

Nota : Os genéricos não funciona com tipos primitivos ( int, float, char, etc).

Java Generics Class

Podemos criar uma classe que pode ser usada com qualquer tipo de dados. Essa classe é conhecida como Classe Genérica.

Veja como podemos criar uma classe de genéricos em Java:

Exemplo: criar uma classe genérica

 class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )

Resultado

 Retornos de classe genérica: 5 retornos de classe genérica: programação Java

No exemplo acima, criamos uma classe genérica chamada GenericsClass. Esta classe pode ser usada para trabalhar com qualquer tipo de dado.

 class GenericsClass (… )

Aqui, T usado dentro do colchete indica o parâmetro de tipo . Dentro da Mainclasse, criamos dois objetos de GenericsClass

  • intObj - Aqui, o parâmetro de tipo T é substituído por Integer. Agora, a GenericsClass trabalha com dados inteiros.
  • stringObj - aqui, o parâmetro de tipo T é substituído por String. Agora, o GenericsClass trabalha com dados de string.

Método Java Generics

Semelhante à classe dos genéricos, também podemos criar um método que pode ser usado com qualquer tipo de dados. Essa classe é conhecida como Método Genérico.

Veja como podemos criar uma classe de genéricos em Java:

Exemplo: Criar um Método Genérico

 class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )

Resultado

 Método genérico: dados passados: Programação Java Método genérico: dados passados: 25

No exemplo acima, criamos um método genérico denominado genericsMethod.

 public void genericMethod(T data) (… )

Aqui, o parâmetro de tipo é inserido após o modificador publice antes do tipo de retorno void.

Podemos chamar o método genérico colocando o tipo real e dentro do colchete antes do nome do método.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Nota : podemos chamar o método genérico sem incluir o parâmetro de tipo. Por exemplo,

 demo.genericsMethod("Java Programming");

Nesse caso, o compilador pode corresponder ao parâmetro de tipo com base no valor passado ao método.

Tipos limitados

Em geral, o parâmetro de tipo pode aceitar qualquer tipo de dados (exceto tipos primitivos).

No entanto, se quisermos usar genéricos para alguns tipos específicos (como aceitar dados de tipos numéricos), então podemos usar tipos limitados.

No caso de tipos vinculados, usamos a extendspalavra - chave. Por exemplo,

 

Isso significa que T só pode aceitar dados que são subtipos de A.

Exemplo: tipos limitados

 class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )

No exemplo acima, criamos uma classe chamada GenericsClass. Observe a expressão, observe a expressão

  

Aqui, GenericsClass é criado com tipo limitado. Isto significa GenericsClass só pode trabalhar com tipos de dados que são filhos de Number( Integer, Doublee assim por diante).

No entanto, criamos um objeto da classe genéricos com String. Nesse caso, obteremos o seguinte erro.

GenericsClass obj = new GenericsClass (); razão: a variável de inferência T tem restrições de igualdade de limites incompatíveis: Limites inferiores da string: Número onde T é uma variável de tipo: T estende Número declarado na classe GenericsClass

Vantagens do Java Generics

1. Reutilização de código

Com a ajuda de genéricos em Java, podemos escrever código que funcionará com diferentes tipos de dados. Por exemplo,

 public void genericsMethod(T data) (… )

Aqui, criamos um método genérico. Este mesmo método pode ser usado para executar operações em dados inteiros, dados de string e assim por diante.

2. Verificação de tipo em tempo de compilação

O parâmetro de tipo dos genéricos fornece informações sobre o tipo de dados usados ​​no código dos genéricos. Por exemplo,

 // using Generics GenericsClass list = new GenericsClass();

Aqui, sabemos que GenericsClass está trabalhando Integerapenas com dados.

Agora, se tentarmos passar dados diferentes de Integer para esta classe, o programa irá gerar um erro em tempo de compilação.

3. Usado com coleções

A estrutura de coleções usa o conceito de genéricos em Java. Por exemplo,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

No exemplo acima, usamos a mesma classe ArrayList para trabalhar com diferentes tipos de dados.

Semelhante a ArrayList, outras coleções ( LinkedList, Queue, Mapse assim por diante) também são genéricos em Java.

Artigos interessantes...