Java LanguageGenerics


introduzione

I generici sono una funzionalità di programmazione generica che estende il sistema di tipi di Java per consentire a un tipo o un metodo di operare su oggetti di vario tipo fornendo nel contempo la sicurezza del tipo in fase di compilazione. In particolare, il framework delle collezioni Java supporta i generici per specificare il tipo di oggetti memorizzati in un'istanza di raccolta.

Sintassi

  • class ArrayList <E> {} // una classe generica con parametro di tipo E
  • class HashMap <K, V> {} // una classe generica con due parametri di tipo K e V
  • <E> void print (elemento E) {} // un metodo generico con parametro tipo E
  • ArrayList <String> nomi; // dichiarazione di una classe generica
  • ArrayList <?> Oggetti; // dichiarazione di una classe generica con un parametro di tipo sconosciuto
  • new ArrayList <String> () // istanza di una classe generica
  • new ArrayList <> () // istanza con tipo di inferenza "diamond" (Java 7 o successivo)

Osservazioni

I generici sono implementati in Java tramite la cancellazione dei tipi, il che significa che durante il runtime le informazioni sul tipo specificate nell'istanza di una classe generica non sono disponibili. Ad esempio, l'istruzione List<String> names = new ArrayList<>(); produce un oggetto lista da cui il tipo di elemento String non può essere recuperato in fase di runtime. Tuttavia, se l'elenco è memorizzato in un campo di tipo List<String> o passato a un parametro method / constructor di questo stesso tipo o restituito da un metodo di quel tipo restituito, le informazioni di tipo completo possono essere ripristinate in fase di runtime attraverso l'API Java Reflection.

Ciò significa anche che quando si esegue il casting su un tipo generico (es .: (List<String>) list ), il cast è un cast non controllato . Poiché il parametro <String> viene cancellato, la JVM non può controllare se un cast da un List<?> un List<String> è corretto; la JVM vede solo un cast per List da List in fase di runtime.

Generics Esempi correlati