Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Genéricos Java

Genéricos Java


Neste tutorial, vamos aprender 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.

Observação :Genéricos não funciona com tipos primitivos (int , float , char , etc).


Classe de Genéricos Java


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

Veja como podemos criar uma classe genérica em Java:

Exemplo:criar uma classe de genéricos

class Main {
  public static void main(String[] args) {

    // initialize generic class
    // with Integer data
    GenericsClass<Integer> intObj = new GenericsClass<>(5);
    System.out.println("Generic Class returns: " + intObj.getData());

    // initialize generic class
    // with String data
    GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
    System.out.println("Generic Class returns: " + stringObj.getData());
  }
}

// create a generics class
class GenericsClass<T> {

  // 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;
  }
}

Saída
Generic Class returns: 5
Generic Class returns: Java Programming

No exemplo acima, criamos uma classe genérica chamada GenericsClass . Esta classe pode ser usada para trabalhar com qualquer tipo de dados.
class GenericsClass<T> {...}

Aqui, T usado dentro do colchete angular <> indica o parâmetro de tipo . Dentro do Main class, criamos dois objetos de GenericsClass

Método Java Genéricos


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

Veja como podemos criar uma classe genérica 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.<String>genericsMethod("Java Programming");

    // generics method working with integer
    demo.<Integer>genericsMethod(25);
  }
}

class DemoClass {

  // creae a generics method
  public <T> void genericsMethod(T data) {
    System.out.println("Generics Method:");
    System.out.println("Data Passed: " + data);
  }
}

Saída
Generics Method:
Data Passed: Java Programming
Generics Method:
Data Passed: 25

No exemplo acima, criamos um método genérico chamado genericsMethod .
public <T> void genericMethod(T data) {...}

Aqui, o parâmetro de tipo <T> é inserido após o modificador public e antes do tipo de retorno void .

Podemos chamar o método generics colocando o tipo real <String> e <Integer> dentro do colchete antes do nome do método.
demo.<String>genericMethod("Java Programming");

demo.<Integer>genericMethod(25);

Observação :Podemos chamar o método generics sem incluir o parâmetro type. Por exemplo,
demo.genericsMethod("Java Programming");

Nesse caso, o compilador pode corresponder ao parâmetro de tipo com base no valor passado para o 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 apenas para alguns tipos específicos (como aceitar dados de tipos numéricos), podemos usar tipos limitados.

No caso de tipos vinculados, usamos o extends palavra-chave. Por exemplo,
<T extends A>

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

Exemplo:tipos limitados

class GenericsClass <T extends Number> {

  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<String> obj = new GenericsClass<>();
  }
}

No exemplo acima, criamos uma classe chamada GenericsClass. Observe a expressão, observe a expressão
<T extends Number> 

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

No entanto, criamos um objeto da classe generics com String . Neste caso, teremos o seguinte erro.
GenericsClass<String> obj = new GenericsClass<>();
                                                 ^
    reason: inference variable T has incompatible bounds
      equality constraints: String
      lower bounds: Number
  where T is a type-variable:
    T extends Number declared in class 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 <T> void genericsMethod(T data) {...}

Aqui, criamos um método genérico. Esse mesmo método pode ser usado para realizar 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 de genéricos fornece informações sobre o tipo de dados usados ​​no código de genéricos. Por exemplo,
// using Generics
GenericsClass<Integer> list = new GenericsClass<>();

Aqui, sabemos que GenericsClass está trabalhando com Integer apenas dados.

Agora, se tentarmos passar dados diferentes de Integer para essa classe, o programa 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<String> list1 = new ArrayList<>();

// creating a integer type ArrayList
ArrayList<Integer> 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 , Maps , e assim por diante) também são genéricos em Java.

Java

  1. Palavra-chave final Java
  2. Java instanceof Operator
  3. Herança Java
  4. Classe estática aninhada em Java
  5. Classe anônima Java
  6. Classe Java Singleton
  7. Reflexão Java
  8. Classe Java ArrayList
  9. Classe Java ObjectOutputStream
  10. Classe de arquivo Java