RTTI VS Reflection


1.RTTI( Run-Time Type Information)

    RTTI( Run-Time Type Information)的主要做用就是運行期鑑定對象的類型,好比須要塑形的時候,使用instanceof判斷類型的時候。Java用Class對象實現本身的RTTI功能,在class對象上能獲得未知對象的類型信息。有三種方式能獲得Class對象 java

1. Class.forName("packagename + classname")
2.ClassName.class
3.object.getClass()

2.反射

    反射要解決的的問題是:1.對於不在本身程序空間內的對象該怎麼處理,2.經過網絡建立與執行位於遠程系統上的對象 ,即"遠程方法調用",好比進行分佈式計算。 web

    針對Field,Method以及Constructor類(每一個都實現了Memberinterface——成員接口),它們都新增了一個庫:java.lang.reflect。這些類型的對象都是JVM在運行期建立的,用於表明未知類裏對應的成員。在class對象上咱們可調用方法getFields(),getMethods(),getConstructors(),分別返回用於表示字段、方法以及構建器的對象數組(在聯機文檔中,還可找到與Class類有關的更多的資料),這樣即可用構建器建立新對象,用get()和set()方法讀取和修改與Field對象關聯的字段,以及用invoke()方法調用與Method對象關聯的方法。而且,經過利用Class對象的newInstance()方法能夠達到 :「儘管我不知道你的準確類型是什麼,但請你不管如何都正確地建立本身。」這樣,經過反射java就實現了能對未知對象進行處理的功效。                             數組

    固然,經過反射還能獲得一個類的結構信息,好比經過getSuperclass()就能獲得父類Class對象,經過getInterfaces()能獲得實現的接口。 網絡

參考:java思想四版 第11章 分佈式

相關文章
相關標籤/搜索