Ich verstand nicht den Unterschied zwischen: MyClass.class
und Class.forName("className")
.
Da beide Klassenname benötigen.
Der große Unterschied ist wenn sie brauchen es. Da Class.forName
einen String akzeptiert, kann der Klassenname zur Laufzeit festgelegt werden. Dagegen wird MyClass.class
zur Kompilierzeit bestimmt. Dies macht Class.forName
nützlich für das dynamische Laden von Klassen basierend auf der Konfiguration (z. B. Laden von Datenbanktreibern abhängig von den Einstellungen einer Konfigurationsdatei).
Abgerundet aus: obj.getClass()
nützlich ist, weil Sie nicht die tatsächliche Klasse eines Objekts — zum Beispiel in einem Verfahren wissen, wo Sie ein Argument über eine Schnittstelle akzeptieren, anstatt Klasse, wie in foo(Map m)
. Sie kennen die Klasse m
nicht, nur dass es etwas implementiert, das Map
implementiert. (Und 99% der Zeit, sollten Sie nicht egal, was seine Klasse ist, sondern dass 1% taucht gelegentlich.)
mögliches Duplikat von [Was ist der Unterschied zwischen dem Aufruf von MyClass.class und MyClass.getClass()] (http://stackoverflow.com/questions/2467970/whats-the-difference-between-calling-myclass-class-and-myclass-) getclass) –
Die Vorschläge oder Implikationen, die in verschiedenen Antworten gemacht werden, dass MyClass.class keine Laufzeitnachschlage verursacht, sind falsch. Es verursacht nur eine * frühere * Laufzeitsuche, wenn die Klasse, die die Referenz enthält, geladen wird! und ein Nachschlagefehler ist für diesen Ladevorgang fatal. – EJP