反射并不好(也好)
大概是通过字符串调用相关的函数或者类,并且这个字符串和函数或类的名字一模一样。这样并不好。
编程语言中可识别的字符都是给人看的,为了编码方便。在编译的时候这些字符都是临时性引用,会被替换成相应简易的数字。这种替换增加了编译的灵活性,也给编程增加了一层“魔法”。
这就像定下了一条规则,函数或者类的名字不会影响到内部的运作机制。这样编译器就可以安心做好自己的事。它的逻辑渗透有一层保护壳,保证不会被外界打扰。
加入了反射就破坏了这层保护壳。使得编译器牵扯进一些归属于它职责之外的内容。这使得整个语言的健壮性令人堪忧。
就像一个人做事,抛弃了一直秉承的原则。
Java和C并不一样,C属于零凑型,java自身是一个整体。所有的类来自同一个继承等,它有一个统一的整体。C的话实现反射还说得过去,因为它本身就是“功能的拼凑”。可是java已经是一个整体,有它的一致性,所有操作不应该打破它建立的抽象层。
反射即是goto,在它面前没有“类”可言。随意的跳转打破了类和类之间的关联性,也打破了类对方法的聚合性,所有方法又变回了放在相应文件里的函数,并不再是对象的行为。
或许框架可以限制goto的范围,可是这种类名字符串回归真实空间的功能使用,会影响底层架构。
反射并不是健壮的发展方式。
编程语言可以有这个功能,并不代表可以被推崇。
补:
反射可以当作一种自动组装的配置文件。像web路由通过读取相关类和方法的名字,自动生成路由。也通过读取相应方法参数的名字,自动填充参数和转换类型。 从这个角度来看,反射相当于利用了元文件 符号文件,来自动配置一些参数。 于是并不像学习过程中使用到的那样,来破坏类结构。如果是站在自动完成配置文件的角度,反射的用处相当于一种高度自动化。 所以之前的观点还是过于狭隘了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构