Cosa sono i generici in Java?

Non capisco davvero il punto di generici. Cosa fanno, come li usi?

Da quello che posso dire, tutto ciò che fanno è controllare i tipi di ritorno ai tempi di compilazione invece dei tempi di esecuzione per evitare di eseguire il programma prima che venga generato un errore. È tutto ciò che fanno?

per esempio:

public  int test() { return 'c'; //will throw error at compile instead of runtime } 

Stavo leggendo qualcosa su come i generici sono arbitrari, e dovresti usare solo lettere maiuscole? Questo è un po ‘di confusione.

I generici ti consentono di personalizzare un metodo o una class ” generica ” con qualsiasi tipo di lavoro. Ad esempio, supponiamo di avere un metodo che aggiunge due numeri insieme. Per poter lavorare con i tipi stessi, potrebbe essere necessario creare più versioni di questo metodo. Per esempio:

 public int Add(int a, int b) public double Add(double a, double b) public float Add(float a, float b) 

I generici consentono di creare un singolo metodo personalizzato per il tipo che lo richiama.

 public T Add(T a, T b) 

T è sostituito per qualunque tipo tu usi.

Fai riferimento ai Fondamenti nelle FAQ di Angelika Langer : è la migliore spiegazione di tutto ciò che riguarda i prodotti generici di Java che probabilmente troverai. Detto questo, l’objective principale dei generici era di abilitare le raccolte “tipizzate”.

Il modo più semplice a cui riesco a pensare per spiegare i generici è la buona metafora copia-incolla:

 public  PASTE addTwoThings(PASTE a, PASTE b) { return a + b; } 

Si specifica un tipo (nella parte ) e java usa questo tipo in tutto il blocco di codice, e si accerterà che i tipi siano compatibili. Facendolo in questo modo, eviti di dover scrivere:

  • addTwoIntegers
  • addTwoStrings
  • addTwoMyObjects

ecc. Non confondere questo per un preprocessore però, Java si aspetta SOLO un tipo da dare.