2010-11-27 12 views
5

Ich bin neu in Java, aber nicht in der Programmierung (ich Code normalerweise in Ruby). Eine Sache, die ich in Java-Codebeispielen gesehen habe, ist die Verwendung von <> anstelle von(), um Parameter an ein Objekt zu übergeben. Unten ist ein Codebeispiel (von Google Web Toolkit Tutorial genommen):Was bedeutet das Objekt <String> in Java?

public void onValueChange(ValueChangeEvent<String> event) { 
    String token = event.getValue(); 

    // depending on the value of the token, do whatever you need 
    ... 
} 

Ist es mit dem Gießen zu tun hat, oder ist es etwas anderes? Kann mir jemand erklären, was das bedeutet oder gebraucht wird? Vielen Dank!

Antwort

4

dass ein type parameter für eine generische Klasse ist. Grundsätzlich stellt ein ValueChangeEvent<String> ein Ereignis dar, das Listenern mitteilt, dass sich ein Wert geändert hat, und in diesem Fall ist der Wert vom Typ String.

Es ist einfacher, mit dem Standard-Beispiel in den Sammlungen Rahmen zu verstehen:

A List<String> ist ein List die String Objekte enthält. Der Vorteil gegenüber der reinen Verwendung des "Raw-Typs" List ist, dass der Compiler einen Code zurückweist, der alles außer String Objekte in eine List<String> einfügt, und die von ihm abgerufenen Objekte als String ohne Casting verwendet.

Grundsätzlich ermöglichen Generika saubereren Code und verbessern die allgemeine Typsicherheit von Java-Code, indem es in vielen Fällen unnötig wird, mit dem Object-Typ zu arbeiten und Werte daraus zu generieren.

3

Es heißt Generika oder generische Parameter. Sie ermöglichen es einer Methode oder einem Objekt, unter Beibehaltung der Typensicherheit mit mehreren Datentypen zu arbeiten. Eine häufige Verwendung besteht darin, anzugeben, um welche Art von Objekten es sich in einer Sammlung handelt.

Weitere Informationen finden Sie unter wikipedia article zu diesem Thema.

+0

... aber wie Wiki Ihnen auch sagen wird, sind Generika in Java wegen der gottverdammten Typenlöschung nicht ganz so typsicher. – delnan

+0

Sie bieten eine viel bessere Typsicherheit als Java vor der Erstellung von Generika, wo Sie ein 'Objekt' zurückgeben mussten und sich darauf verlassen konnten, dass es korrekt gewirkt wurde und keine Kompilierzeitprüfung bietet. Ja, die Schreiboperation löscht manchmal Bälle (besonders bei Arrays), aber es ist * viel * besser als gar nichts. –

0

<> bedeuten generics. Schauen Sie sich Generics an. Zum Beispiel ist List<String> eine Liste von Zeichenfolgen.

0

Dies als generics in Java bekannt ist. Sie ähneln templates in C++.

Sie lassen Sie im Grunde eine generische Klasse für jeden Typ implementieren und dann, wenn Sie eine Variable dieser Klasse initialisieren, geben Sie an, welchen Typ (z. B. String, int, double usw.) es anwendet. Ein gutes Beispiel ist in einer ArrayList, welchen Typ sollte der Container speichern? Die Implementierung ist die gleiche, nur der Typ unterscheidet sich.

+0

Zu sagen, dass sie Vorlagen in C++ ähnlich sind, wäre IMO falsch, da Vorlagen im Vergleich zu Generika grundsätzlich auf einem ganz anderen Niveau arbeiten. Moar lesen: http://stackoverflow.com/questions/36347/what-are-the-differences-between-gineric-types-in-c-and-java/498329#498329 –

1

Die Verwendung von spitzen Klammern bedeutet in der Regel generische Programmiermethoden, die eine Art der Programmierung sind, bei der Typen nicht anfänglich deklariert werden, wodurch Code viel wiederverwendbarer wird.

Zum Beispiel:

// Declare the generic class 
public class GenericList<T> 
{ 
    void Add(T input) { } 
} 
class TestGenericList 
{ 
    private class ExampleClass { } 
    static void Main() 
    { 
     // Declare a list of type int 
     GenericList<int> list1 = new GenericList<int>(); 

     // Declare a list of type string 
     GenericList<string> list2 = new GenericList<string>(); 

     // Declare a list of type ExampleClass 
     GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); 
    } 
} 
0

Es wird normalerweise verwendet, damit Sie darauf vertrauen können, dass ein Element einer Sammlung/Liste ein bestimmter Typ ist.

Zum Beispiel

ArrayList<String> a = new ArrayList(); 
a.add("Test"); 

myFunctionWhichAcceptsString(a.get(0)); 

Wenn myFunctionWhichAcceptsString nur einen String als Parameter akzeptiert, würden Sie nicht das Ergebnis als String ohne zu Gießen, ein normales Arraylist verwenden können, da es ein Objekt speichert und Objekt ≠ Zeichenfolge. Auf diese Weise sagst du, dass die Liste nur Strings sein muss. Sie können dies für jede Art von Objekt tun.