Was bedeutet class In Java?

Frage wie oben, tut mir leid, es ist wahrscheinlich ein Duplikat, aber ich konnte kein Beispiel mit dem am Ende finden.

Warum würden Sie nicht einfach Class als Parameter verwenden?

Solutions Collecting From Web of "Was bedeutet class In Java?"

Class ist eine parametrisierbare class, daher können Sie die Syntax Class wobei T ein Typ ist. Wenn Sie die Class< ?> Schreiben, deklarieren Sie ein classnobjekt, das von einem beliebigen Typ sein kann ( ? Ist ein Platzhalter). Der Class ist ein Typ, der Metainformationen zu einer class enthält.

Es ist immer gut, sich auf einen generischen Typ zu beziehen, indem Sie seinen spezifischen Typ angeben, indem Sie Class< ?> Verwenden. Sie respektieren diese Übung (Sie wissen, dass Class parametrisierbar ist), aber Sie beschränken Ihren Parameter nicht auf a bestimmter Typ

Referenz zu Generika und Wildcards: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

Referenz zu classnobjekt und -reflexion (die function der Java-Sprache, die verwendet wird, um sich selbst zu untersuchen): http://java.sun.com/developer/technicalArticles/ALT/Reflection/

Das ist ein Biest. Es führt oft zu Verwirrung und Fehlern, denn wenn Sie es zuerst sehen, dann beginnen Sie zu glauben, < ?> Ist ein Platzhalter für jeden Java-Typ . Was nicht wahr ist. < ?> ist der unbekannte Typ , ein leichter und unangenehmer Unterschied.

Es ist kein Problem, wenn Sie es mit Class . Beide Zeilen arbeiten und kompilieren:

 Class anyType = String.class; Class < ?> theUnknownType = String.class; 

Aber – wenn wir anfangen, es mit Sammlungen zu verwenden, dann sehen wir seltsame compiletime Fehler:

 List< ?> list = new ArrayList(); // ArrayList< ?> is not allowed list.add("a String"); // doesn't compile ... 

Unsere List< ?> Ist keine Sammlung, die für jede Art von Objekt geeignet ist. Es kann nur einen Typ speichern: den mystischen “unbekannten Typ”. Was sicher kein echter Typ ist.

Dies bedeutet, dass Ihre classnreferenz einen Verweis auf ein classnobjekt enthalten kann.

Es ist im Grunde das gleiche wie “class”, aber Sie zeigen anderen Leuten, die Ihren Code lesen, dass Sie Generika nicht vergessen haben, Sie wollen nur eine Referenz, die jedes classnobjekt enthalten kann.

Bruce Eckel, Denken in Java:

In Java SE5 wird die class < ?> Der einfachen class vorgezogen, obwohl sie äquivalent ist und die einfache class, wie Sie gesehen haben, keine Compiler-Warnung erzeugt. Der Vorteil der class < ?> Besteht darin, dass sie anzeigt, dass Sie nicht nur eine unspezifische classnreferenz aus Versehen oder aus Unwissenheit verwenden. Sie haben die unspezifische Version gewählt.

Es ist ein Generika- Literal. Dies bedeutet, dass Sie den Typ der class nicht kennen, die diese classninstanz darstellt, aber Sie verwenden immer noch die generische Version.

  • Wenn Sie die class kennen würden, würden Sie Class . Auf diese Weise können Sie zum Beispiel eine neue Instanz ohne Casting erstellen: Foo foo = clazz.newInstance();
  • Wenn Sie überhaupt keine Generika verwenden, erhalten Sie zumindest eine Warnung (von der Verwendung von Generika wird im Allgemeinen abgeraten, da dies zu schwer erkennbaren Nebenwirkungen führen kann).

In Generics wird ein unbekannter Typ durch das Platzhalterzeichen “?” Dargestellt. Lesen Sie hier für ein offizielles Beispiel.

Das bedeutet eine class mit einer Art von irgendetwas (unbekannt).

Sie sollten Java Generics Tutorial lesen, um es besser zu verstehen