2013-05-14 15 views

Antwort

7

Der Begriff "RTTI" ist ein C++ - spezifischer Begriff, der sich auf die Funktionalität der Kernsprache bezieht, mit der das Programm die dynamischen Typen verschiedener Objekte zur Laufzeit bestimmen kann. Es bezieht sich normalerweise auf die Operatoren dynamic_cast oder typeid zusammen mit dem zugehörigen std::type_info Objekt, das von typeid produziert wird. Der Begriff Reflexion ist andererseits ein generischer Begriff, der in allen Programmiersprachen verwendet wird, um auf die Fähigkeit eines Programms zu verweisen, seine Objekte, Typen usw. zur Laufzeit zu überprüfen und zu modifizieren.

Der Begriff bewarb ich mich auf instanceof gehört habe, ist type introspection und instanceof wird manchmal als Objekt Selbstbeobachtung, da das Programm an den Laufarten zu suchen erlaubt ist, um zu bestimmen, welche Vorgehensweise zu nehmen. Ich denke, das ist ein schwacher Begriff als Reflexion, da es keine eingehende Introspektion auf den Feldern oder Methoden eines Objekts erlaubt, aber ich denke nicht, dass es technisch falsch wäre, die Verwendung der Operatorreflexion instanceof aufzurufen.

Zu Ihrer anderen Frage - wie werden Klasseninformationen zur Laufzeit geladen? - Das liegt wirklich an der JVM-Implementierung. Der Typ ClassLoader ist letztendlich dafür verantwortlich, Klassen in das System zu laden, aber die JVM kann dies so interpretieren, wie sie es will. Ich habe einmal eine Prototyp-JVM in JavaScript erstellt, und intern haben alle Reflection-Aufrufe nur die zugrunde liegenden JS-Datenstrukturen abgefragt, die ich zur Darstellung von Klassen, Feldern und Methoden eingerichtet hatte. Ich könnte mir vorstellen, dass die HotSpot JVM etwas völlig anderes macht, aber es ist ziemlich implementationsdefiniert.

Hoffe, das hilft!

+0

danke! Irgendwie habe ich in meinem Java-Kurs etwas über RTTI gelernt, weshalb ich wahrscheinlich verwirrt wurde: S – godlamp

2

Kurz gesagt besteht der wahre Unterschied zwischen RTTI und Reflektion darin, dass der Compiler mit RTTI die .class-Datei zur Kompilierzeit öffnet und untersucht. Bei Reflektion ist die .class-Datei zur Kompilierzeit nicht verfügbar. Es wird von der Laufzeitumgebung geöffnet und untersucht.

0

Der wahre Unterschied zwischen RTTI und Reflektion besteht also darin, dass der Compiler mit RTTI die .class-Datei zur Kompilierzeit öffnet und untersucht. Mit anderen Worten, Sie können alle Methoden eines Objekts auf "normale" Weise aufrufen. Bei Reflektion ist die .class-Datei zur Kompilierzeit nicht verfügbar. Es wird von der Laufzeitumgebung geöffnet und untersucht. (с)

Verwandte Themen