2010-01-06 8 views

Répondre

5

C'est une question assez énorme, pour être honnête - les plus grandes différences ne sont pas dans la syntaxe, mais dans le comportement ... à quel point ils sont vraiment, vraiment différents. Je suggère que vous lisiez les Sun generics tutorial et Angelika Langer's Java Generics FAQ. Oubliez tout ce que vous savez sur les génériques de C# /. NET d'abord. En particulier, alors que les types génériques .NET conservent l'argument type lors de l'exécution, les génériques Java ne sont pas dus à type erasure.

En d'autres termes, en C# vous pouvez écrire:

public class GenericType<T> 
{ 
    public void DisplayType() 
    { 
     Console.WriteLine(typeof(T)); 
    } 
} 

... vous ne pouvez pas le faire en Java :(

De plus, les génériques .NET peuvent avoir des arguments de type de type valeur , alors que Java génériques ne peut pas (vous devez utiliser List<Integer> au lieu de List<int> par exemple).

ce sont probablement les deux plus grands différences, mais il vaut bien essayer d'apprendre Java gener ics à partir de zéro au lieu de "diff" de C#.

1

Il existe un certain nombre d'articles à ce sujet, mais il y a one notable example qui traite de certaines des différences et des limitations des génériques en Java.

Voici un exemple simple tiré du tutoriel Collections existantes:

// Removes 4-letter words from c. Elements must be strings 
static void expurgate(Collection c) { 
    for (Iterator i = c.iterator(); i.hasNext();) 
     if (((String) i.next()).length() == 4) 
     i.remove(); 
} 

Voici le same example modifié pour utiliser les médicaments génériques:

// Removes the 4-letter words from c 
static void expurgate(Collection<String> c) { 
    for (Iterator<String> i = c.iterator(); i.hasNext();) 
     if (i.next().length() == 4) 
     i.remove(); 
} 
Questions connexes