Sobes.tech
Middle

O que são genéricos?

sobes.tech IA

Resposta da IA

Os genéricos são um mecanismo que permite escrever classes, interfaces e métodos que trabalham com dados de diferentes tipos, garantindo a segurança de tipos durante a compilação. Permitem criar componentes reutilizáveis que podem trabalhar com qualquer tipo de dado, sem perder informações sobre o tipo, o que minimiza erros de conversão de tipos em tempo de execução.

Vantagens principais:

  • Segurança de tipos: O compilador verifica a utilização correta dos tipos em estruturas genéricas.
  • Redução de código: Uma única classe ou método genérico pode trabalhar com múltiplos tipos.
  • Legibilidade do código: É claro com quais tipos o componente trabalha.
  • Melhoria de desempenho (em alguns casos): A ausência de necessidade de conversões de tipos em tempo de execução pode melhorar ligeiramente o desempenho.

Exemplo (Java):

// Exemplo de classe genérica
class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

// Uso de classe genérica com diferentes tipos
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Segurança de tipos, sem necessidade de conversão para int

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Segurança de tipos, sem necessidade de conversão para String

Exemplo (Python - Type Hinting, aproximado a Generics):

from typing import TypeVar, Generic

T = TypeVar('T')

class Box(Generic[T]):
    def __init__(self) -> None:
        self._content: T | None = None

    def set_content(self, content: T) -> None:
        self._content = content

    def get_content(self) -> T | None:
        return self._content

# Uso com type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Ajuda às ferramentas de análise estática

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Ajuda às ferramentas de análise estática