2010-06-10 8 views
2

Possible en double:
Java GenericsQuel est le rôle des types de données à l'intérieur de < > en Java?

Pour être plus précis, ce qui est le rôle du < chaîne > dans la ligne de code suivante?

private List<String> item = new ArrayList<String>(); 
+4

Je ne pense pas que ce soit un doublon. Il y a une différence entre ne pas savoir comment fonctionnent les génériques, et ne pas savoir ce qu'est un générique en premier lieu (ou < > représente) – OscarRyz

+0

I donno ... On dirait que pointer le lecteur de cette question vers une description des génériques répond plutôt bien. .. Considérez: les meilleures réponses sur les deux questions consistent principalement en des liens vers des tutoriels. – Shog9

Répondre

7

Principalement pour permettre au compilateur de soulever une erreur si vous n'insérez pas le bon type de données dans la liste ou si vous attendez des données du mauvais type dans la liste au moment de l'extraction

Mais voir le tutoriel de génériques pour une explication: http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

4

Cela signifie que la liste ne peut contenir que des éléments du type String. Il ne peut pas contenir d'éléments de type Number, SomeObject, WhateverType. Il est appelé Génériques. En Java, c'est du sucre syntactique en temps de compilation pour rendre le code plus robuste sans risque pour ClassCastException et consorts sur la récupération des éléments de la liste pendant l'exécution. Vous pouvez trouver ici un Sun tutorial on the subject, il explique également le raisonnement derrière le passage à Generics.

+0

Cela ne signifie pas ** que la liste ne peut contenir que le type. Cela signifie que vous avez demandé au compilateur de vous donner une erreur si vous utilisez des moyens évidents pour stocker un non-String. Au moment de l'exécution, l'effacement du type est en vigueur et tout est permis. – bmargulies

+0

@bmargulies: Oui, c'est en effet juste le temps de la compilation du sucre syntaxique comme dit au 2ème paragraphe :) – BalusC

+0

Je suis apparemment hypersensible quant à la conduite de la réponse avec le langage qui pourrait tromper. Je vois ce que vous voulez dire au sujet du paragraphe 2. – bmargulies

3

Ce sont generics et où introduit sur la v1.5 de Java

Ils vous permettent de fournir la compilation contrôle horaire de la classe utilisée.

Vous pouvez lire la déclaration:

private List<String> item = new ArrayList<String>(); 

Comme:

private List of Strings named item initialized with an ArraysList of Strings 

Donc, si vous essayez de mettre quelque chose qui est pas une chaîne, vous aurez une exception de compilation:

private List<String> items = new ArrayList<String>(); 
... 
items.add(new Date()); // fails at compilation time 

Lorsque vous obtenez quelque chose de cette liste, vous obtenez une liste

private List<String> item = new ArrayList<String>(); 
... 
items.add("Hello"); 
String s = items.get(0);// returns 

Pour utiliser différentes classes que vous fournissez un autre type:

private List<Date> dates = new ArrayList<Date>(); 

Et maintenant, vous ne pouvez utiliser Dates avec cette collection.

0

La raison de votre nouvelle édition de Java après JDK 1.5 ou plus tard car elle donne plus de facilité au programmeur car elle autorise la sécurité de type au type de compilation seulement. La question à un million de dollars est la raison pour laquelle c'est nécessaire? La réponse est laissé dire que vous avez la liste dans laquelle vous souhaitez ajouter des objets de type entier ne en comme ci-dessous

List list = new ArrayList(); 
list.add(new Integer(5)); 

mais par erreur vous ajoutez objet chaîne en elle.

list.add("Test"); 

maintenant en vous un autre code que vous utilisez cette liste en supposant que toutes les valeurs sont des nombres entiers

(Integer)list.get(2); 

cela donnera erreur au moment de l'exécution, pour ainsi éviter cela, il est préférable de définir votre liste à déclaration partie comme liste et il ne vous permettra pas de vous ajouter un objet chaîne.

Questions connexes