反射並不好

  大概是通過字符串調用相關的函數或者類,並且這個字符串和函數或類的名字一模一樣。這樣並不好。

  編程語言中可識別的字符都是給人看的,爲了編碼方便。在編譯的時候這些字符都是臨時性引用,會被替換成相應簡易的數字。這種替換增加了編譯的靈活性,也給編程增加了一層“魔法”。

  這就像定下了一條規則,函數或者類的名字不會影響到內部的運作機制。這樣編譯器就可以安心做好自己的事。它的邏輯滲透有一層保護殼,保證不會被外界打擾。

  加入了反射就破壞了這層保護殼。使得編譯器牽扯進一些歸屬於它職責之外的內容。這使得整個語言的健壯性令人堪憂。

  就像一個人做事,拋棄了一直秉承的原則。

  Java和C並不一樣,C屬於零湊型,java自身是一個整體。所有的類來自同一個繼承等,它有一個統一的整體。C的話實現反射還說得過去,因爲它本身就是“功能的拼湊”。可是java已經是一個整體,有它的一致性,所有操作不應該打破它建立的抽象層。

  反射即是goto,在它面前沒有“類”可言。隨意的跳轉打破了類和類之間的關聯性,也打破了類對方法的聚合性,所有方法又變回了放在相應文件裏的函數,並不再是對象的行爲。

  或許框架可以限制goto的範圍,可是這種類名字符串迴歸真實空間的功能使用,會影響底層架構。

  反射並不是健壯的發展方式。

  編程語言可以有這個功能,並不代表可以被推崇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章