Middle
¿Qué son las genéricos?
sobes.tech AI
Respuesta de la IA
Las genéricos son un mecanismo que permite escribir clases, interfaces y métodos que trabajan con datos de diferentes tipos, pero garantizando la seguridad de tipos en tiempo de compilación. Permiten crear componentes reutilizables que pueden trabajar con cualquier tipo de dato, sin perder información sobre el tipo, lo que minimiza errores de conversión de tipos en tiempo de ejecución.
Ventajas principales:
- Seguridad de tipos: El compilador verifica la correcta utilización de los tipos en las estructuras genéricas.
- Reducción de código: Una sola clase o método genérico puede trabajar con múltiples tipos.
- Legibilidad del código: Es claro con qué tipos trabaja el componente.
- Mejora del rendimiento (en algunos casos): La ausencia de necesidad de conversiones de tipos en tiempo de ejecución puede mejorar ligeramente el rendimiento.
Ejemplo (Java):
// Ejemplo de clase genérica
class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
// Uso de la clase genérica con diferentes tipos
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Seguridad de tipos, no es necesario convertir a int
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Seguridad de tipos, no es necesario convertir a String
Ejemplo (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 con type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Ayuda a las herramientas de análisis estático
string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Ayuda a las herramientas de análisis estático