Programmation Java: tout sur les génériques

L'un des objectifs de conception d'origine pour Java était de garder la langue aussi simple que possible. Le développeur du langage a pris certaines caractéristiques inutilement compliquées de C ++ et les jeta par la fenêtre. Le résultat a été une langue qui était élégant et épuré. Certaines personnes ont dit la langue était trop élégant.

Ainsi, après plusieurs années de discussions et de querelles, Java est devenu un peu plus compliqué. En l'an 2004, avait Java ENUM types, améliorée pour boucles, l'importation statique, et quelques autres nouvelles fonctionnalités intéressantes. Mais le propos de-parlé nouvelle caractéristique la plus a été l'introduction de médicaments génériques.

ArrayList personnes = new ArrayList() -

L'utilisation de quelque chose comme était nouveau en Java 5.0. Dans l'ancienne Java, vous écririez

Personnes ArrayList = new ArrayList () -

En ces jours, un ArrayList pourrait stocker presque tout ce que vous vouliez mettre en elle - un nombre, une Considération, un Chambre, un Chaîne . . . n'importe quoi. La ArrayList classe était très polyvalent, mais avec cette polyvalence est venu quelques maux de tête. Si vous pouvez mettre n'importe quoi dans un ArrayList, vous ne pouviez pas prévoir facilement ce que vous voulez sortir d'une ArrayList.

En particulier, vous ne pouvez pas facilement écrire du code qui suppose que vous aviez stocké certains types de valeurs dans le ArrayList. Voici un exemple:




Choses ArrayList = new ArrayList () - things.add (nouveau compte ()) - Compte monCompte = things.get (0) - // Ne pas utiliser ce. Il est mauvais code.

Dans la troisième ligne, l'appel à obtenir (0) attrape la première valeur dans la choses collection. L'appel à la obtenir (0) est correct, mais le compilateur étouffe sur la tentative de cession de mon compte. Vous obtenez un message sur la troisième ligne en disant que ce que vous obtenez à partir de la choses liste ne peut être fourré dans la mon compte variable.

Vous recevez ce message parce que, au moment où le compilateur atteint la troisième ligne, il a oublié que l'élément ajouté sur la deuxième ligne était de type Considération!

L'introduction des génériques résout ce problème:

ArrayList choses = new ArrayList() -things.add (nouveau compte ()) - Compte monCompte = things.get (0) - // utiliser ce code à la place. Il est bon code.

Ajout à deux endroits indique au compilateur que choses magasins Considération cas - rien d'autre. Donc, dans la troisième ligne dans le code précédent, vous obtenez une valeur de la choses collection. Ensuite, parce que choses magasins seulement Considération objets, vous pouvez faire mon compte se référer à cette nouvelle valeur.

Java 5.0 ajoute génériques à Java. Mais peu de temps après la naissance de Java 5.0, les programmeurs ont remarqué combien maladroite du code des génériques peut être. Après tout, vous pouvez créer des génériques dans les médicaments génériques. Un ArrayList peut contenir un groupe de tableaux, dont chacun peut être un ArrayList. Donc vous pouvez écrire

ArrayList[]> Gâchis = new ArrayList[]> () -

Toute la répétition en ce que désordre déclaration donne aux programmeurs un mal de tête! Pour éviter cette laideur, Java 7 et les versions ultérieures ont une opérateur diamant, lt;>. L'opérateur diamant raconte Java pour réutiliser autant de trucs incroyablement compliquée que vous mettez dans la partie précédente de la déclaration générique.

Dans cet exemple, la lt;> dit de réutiliser Java []>, même si vous écrivez []> juste une fois. Voici comment le rationalisée Java 7 code ressemble:

ArrayList[]> Gâchis = new ArrayListlt;>() -

En Java 7 et plus tard, vous pouvez écrire une de ces désordre déclarations - la, déclaration méchant original avec deux occurrences de ArrayList[], ou simplifié (seulement légèrement méchant) déclaration auprès de l'opérateur diamant et un seul ArrayList[] occurrence.

Oui, le code simplifié est toujours compliqué. Mais sans tous les ArrayList[] répétition, le code simplifié est moins encombrant. L'opérateur diamant Java 7 enlève une chance pour vous de copier quelque chose de mal et avoir une grosse erreur dans votre code.


» » » » Programmation Java: tout sur les génériques