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