2013-05-14 14 views

Odpowiedz

7

Termin "RTTI" jest terminem specyficznym dla C++ odnoszącym się do funkcjonalności języka podstawowego, który umożliwia programowi określenie dynamicznych typów różnych obiektów w czasie wykonywania. Zwykle odnosi się do operatorów dynamic_cast lub typeid, wraz z powiązanym obiektem std::type_info wyprodukowanym przez typeid.

Termin "odbicie" jest ogólnym terminem używanym w różnych językach programowania w odniesieniu do zdolności programu do sprawdzania i modyfikowania jego obiektów, typów itp. W czasie wykonywania.

Termin Słyszałem stosowane do instanceof jest type introspection i instanceof jest czasem określane jako obiektu introspekcji, ponieważ program może spojrzeć na prowadzących do określenia typów, jakie działania podjąć. Myślę, że jest to pojęcie słabsze od refleksji, ponieważ nie pozwala na skomplikowaną introspekcję na polach lub metodach obiektu, ale nie sądzę, by byłoby technicznie niepoprawne wywołać użycie odbicia operatora.

Co do innego pytania - w jaki sposób informacje o klasach są ładowane w czasie wykonywania? - to naprawdę zależy od wdrożenia JVM. Typ ClassLoader jest ostatecznie odpowiedzialny za ładowanie klas do systemu, ale JVM może to zinterpretować, jakkolwiek tego chce. Kiedyś zbudowałem prototypową maszynę JVM w JavaScript, a wewnętrznie wszystkie wywołania refleksji właśnie przeszukały podstawowe struktury danych JS, które miałem na celu reprezentowania klas, pól i metod. Mogę sobie wyobrazić, że maszyna wirtualna HotSpot JVM robi coś zupełnie innego, ale jest prawie zdefiniowana przez implementację.

Mam nadzieję, że to pomoże!

+0

dzięki! W jaki sposób dowiedziałem się o RTTI na moim kursie Java, prawdopodobnie dlatego się pomyliłem: S – godlamp

2

W skrócie, prawdziwą różnicą między RTTI i refleksją jest to, że przy RTTI kompilator otwiera i analizuje plik .class w czasie kompilacji. Z refleksją plik .class jest niedostępny podczas kompilacji; jest otwierany i badany przez środowisko uruchomieniowe.

0

Tak więc prawdziwą różnicą między RTTI i refleksją jest to, że przy RTTI kompilator otwiera i analizuje plik .class w czasie kompilacji. Innymi słowy, możesz wywołać wszystkie metody obiektu w "normalny" sposób. Z refleksją plik .class jest niedostępny podczas kompilacji; jest otwierany i badany przez środowisko uruchomieniowe. (с)

Powiązane problemy