反射,所有教科書都正兒八經的講了,這里只能再隨便講兩句。
反射是一種讓框架能夠根據 "以字符串形式存在的信息" 來調用對象的屬性和函數的技術,是Java對C++最大的進步之一---讓框架編程真正走向平民化。MFC年代,無論侯捷如何深入淺出,還在念大學的我就是搞不懂那些注冊"消息--函數映射"的魔法宏。
不過Java的反射也就是對著C++比較自豪而以,因為C#,Ruby,Python甚至php都標配了反射的功能。而且,人家的反射語法都是內嵌在基礎Object類的,拿最弱的php來看:
$func_name="helloworld";
$foo->$func_name;
而Java,卻搞出了Class,Methed, Field,Constructor這么一大堆類出來。本來這是Java設計師很嚴謹,很cool的體現,問題是它居然不提供一種集成的簡便的寫法......相同的情形還出現在Java的I/O 類庫里。
微軟這方面就做得好些,懂得討好開發人員。
因為Java的無情,就搞得大家的項目里要自制BeanUtils了。幸虧
Apache Jakarta Commons 已經做了一個比較好的,可以直接使用--
以前寫的介紹文章。
另外Spring也做了一個。
閑得沒事做的,還可以emule一本〈Relection in action〉回來看。
而C++下面的"反射",見
我偶像di文章。另還有一個比較BT的C++框架叫
ACDK的,把自己整得和Java很像,有反射和垃圾收集,甚至和JSDK差不多的線程,Unicode,I/O,網絡,XML API。可惜的是,即使到了C++0x, B大叔還是不準備在語言級支持反射。
系列文章:
Java下的框架編寫(1)--序Java下的框架編程(2)-對泛型的無聊用法和為擦拭法站臺 Java下的框架編程(3)--關于反射的碎話 Java下的框架編程(4)--Annotation vs XML vs Interface 最新一Round Java下的框架編程(5)--cglib應用Java下的框架編程(6)--asm(待寫)