DEV Community

Classe genérica com dois parâmetros de tipo

Em Java, é possível declarar uma classe genérica que aceita dois ou mais parâmetros de tipo. Esses parâmetros são especificados como uma lista separada por vírgulas.

Por exemplo, a classe genérica TwoGen aceita dois parâmetros de tipo:

class TwoGen<T, V> {
    T ob1;
    V ob2;

    // Construtor que recebe objetos de tipos T e V
    TwoGen(T o1, V o2) {
        ob1 = o1;
        ob2 = o2;
    }

    // Exibe os tipos de T e V
    void showTypes() {
        System.out.println("Type of T is " + ob1.getClass().getName());
        System.out.println("Type of V is " + ob2.getClass().getName());
    }

    T getob1() { return ob1; }
    V getob2() { return ob2; }
}

Enter fullscreen mode Exit fullscreen mode

Exemplo de uso:
A classe pode ser utilizada com diferentes tipos, como mostrado abaixo:

TwoGen<Integer, String> tgObj = new TwoGen<>(88, "Generics");
tgObj.showTypes(); // Exibe os tipos de T e V

int v = tgObj.getob1();  
System.out.println("value: " + v);  

String str = tgObj.getob2();  
System.out.println("value: " + str);  

Enter fullscreen mode Exit fullscreen mode

Saída do exemplo:

Type of T is java.lang.Integer  
Type of V is java.lang.String  
value: 88  
value: Generics  

Enter fullscreen mode Exit fullscreen mode

Notas importantes:

Ao declarar TwoGen, é necessário passar dois argumentos de tipo ao criar uma instância, como neste exemplo:

TwoGen<Integer, String> tgObj = new TwoGen<>(88, "Generics");

Enter fullscreen mode Exit fullscreen mode

Aqui, T é substituído por Integer e V por String.

Os argumentos de tipo podem ser iguais:

TwoGen<String, String> x = new TwoGen<>("A", "B");

Enter fullscreen mode Exit fullscreen mode

Nesse caso, tanto T quanto V são do tipo String.

Forma geral da declaração de uma classe genérica:

class NomeClasse<ParâmetrosTipo> {
    // Implementação
}

Enter fullscreen mode Exit fullscreen mode

Forma geral para criar uma instância genérica:

NomeClasse<ArgumentosTipo> nomeVariavel = new NomeClasse<>(ArgumentosConstrutor);

Enter fullscreen mode Exit fullscreen mode

Top comments (0)