反射并不好

  大概是通过字符串调用相关的函数或者类,并且这个字符串和函数或类的名字一模一样。这样并不好。

  编程语言中可识别的字符都是给人看的,为了编码方便。在编译的时候这些字符都是临时性引用,会被替换成相应简易的数字。这种替换增加了编译的灵活性,也给编程增加了一层“魔法”。

  这就像定下了一条规则,函数或者类的名字不会影响到内部的运作机制。这样编译器就可以安心做好自己的事。它的逻辑渗透有一层保护壳,保证不会被外界打扰。

  加入了反射就破坏了这层保护壳。使得编译器牵扯进一些归属于它职责之外的内容。这使得整个语言的健壮性令人堪忧。

  就像一个人做事,抛弃了一直秉承的原则。

  Java和C并不一样,C属于零凑型,java自身是一个整体。所有的类来自同一个继承等,它有一个统一的整体。C的话实现反射还说得过去,因为它本身就是“功能的拼凑”。可是java已经是一个整体,有它的一致性,所有操作不应该打破它建立的抽象层。

  反射即是goto,在它面前没有“类”可言。随意的跳转打破了类和类之间的关联性,也打破了类对方法的聚合性,所有方法又变回了放在相应文件里的函数,并不再是对象的行为。

  或许框架可以限制goto的范围,可是这种类名字符串回归真实空间的功能使用,会影响底层架构。

  反射并不是健壮的发展方式。

  编程语言可以有这个功能,并不代表可以被推崇。

原文地址:https://www.cnblogs.com/flangrean/p/15545585.html