Sobes.tech
Middle

Cosa sono i Generics?

sobes.tech AI

Risposta dell'AI

I Generici sono un meccanismo che permette di scrivere classi, interfacce e metodi che lavorano con dati di diversi tipi, garantendo la sicurezza dei tipi durante la compilazione. Consentono di creare componenti riutilizzabili che possono lavorare con qualsiasi tipo di dato, senza perdere informazioni sul tipo, minimizzando così gli errori di conversione dei tipi a runtime.

Vantaggi principali:

  • Sicurezza dei tipi: Il compilatore verifica l’uso corretto dei tipi nelle strutture generiche.
  • Riduzione del codice: Una singola classe o metodo generico può lavorare con molti tipi.
  • Leggibilità del codice: È chiaro con quali tipi il componente lavora.
  • Miglioramento delle prestazioni (in alcuni casi): L’assenza di necessità di conversioni di tipo a runtime può migliorare leggermente le prestazioni.

Esempio (Java):

// Esempio di classe generica
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Uso di classe generica con diversi tipi
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Sicurezza dei tipi, nessuna conversione necessaria

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Sicurezza dei tipi, nessuna conversione necessaria

Esempio (Python - Type Hinting, vicino ai 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() # Aiuta gli strumenti di analisi statica

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Aiuta gli strumenti di analisi statica