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