2009-08-19 14 views
3

Im Laufe der Jahre habe ich gesehen, dass viele Leute das Wort "Generika" benutzen, ich habe wirklich keine Ahnung, was es bedeutet, was auch immer es ist, ich werde es wahrscheinlich benutzen, aber ich weiß einfach nicht, dass es so genannt wurde. : PJava Generics?

+0

nicht nur eine echte Frage, sondern ein echtes Duplikat http://stackoverflow.com/questions/490091/java-generics und viele anderen. –

Antwort

23

Von http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

Generics bietet eine Möglichkeit für Sie den Typ einer Sammlung an den Compiler zu kommunizieren, so dass geprüft werden kann. Sobald der Compiler den Elementtyp der Auflistung kennt, kann der Compiler überprüfen, ob Sie die Auflistung konsistent verwendet haben, und er kann die korrekten Umwandlungen für Werte einfügen, die aus der Auflistung entnommen werden.

Hier ist ein einfaches Beispiel aus den bestehenden Sammlungen Tutorial genommen:

// 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(); 

} 

Hier ist das gleiche Beispiel Generika modifizierte zu verwenden:

// 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(); 

} 

Sorry für die direkten c & p aber ich fand, dass dieses Schreiben besser war als etwas, das ich hätte schreiben können.

bearbeiten einen guten Punkt in den Kommentaren umfassen:

Generics nicht auf sind begrenzt den Typ einer Sammlung an den Compiler zu kommunizieren ... die Sammlungen Bibliothek nur zufällig sein, ein guter Weg , um sie zu demonstrieren.

+1

+1 für eine vollständige und umfassende Antwort mit einem Link zur Dokumentation. –

+2

Ich würde Ihnen auch empfehlen, das Generics-Kapitel von Effective Java (2. Ausgabe) zu lesen - online verfügbar unter http://java.sun.com/docs/books/effective/generics.pdf. Dies ist besonders nützlich, wenn Sie eine generische Klasse schreiben (anstatt nur eine wie im Beispiel zu verwenden). –

+0

@Kathy, +1 guter Link –

0

Generika sind nur Javas Implementierung des parametrischen Polymorphismus. Sie funktionieren genau wie parametrischer Polymorphismus in jeder anderen Sprache.

+2

Nicht ganz. In Java werden Generika über Typ-Löschung implementiert. Mit anderen Worten, sie sind nur syntaktischer Zucker und ändern den zugrunde liegenden Bytecode überhaupt nicht. Dies unterscheidet sich sehr von Generika in beispielsweise C++ oder C#, wo die parametrisierten Typen tatsächlich unterschiedliche Typen sind. –

+0

Ich war versucht, hinzuzufügen "...nur hässlicher und schlechter "zum letzten Satz, aber ich dachte, das wäre wenig unfair. Allerdings wurden Java Generics ua von Phil Wadler entworfen, der auch am Design von Haskell beteiligt war, das wohl die umfassendste Umsetzung von Parametrik Polymorphismus. –

4

Es läuft im Grunde auf eine Verringerung der Anzahl der Male ab, die Sie werfen müssen. ;-)

List<String> lst = new ArrayList<String>(); 
... 
String first = lst.get(0); 

gegen

List lst = new ArrayList(); 
... 
String first = (String) lst.get(0);