
微软
p => p.Price > 30 的含义?难道要通过反射来分析代码?即便如此,这种方式与表达式树的区别又有多少?更重要的是,你自己手动分析代码是否比使用表达式树更方便?你真的有信心自己实现的表达式树会比框架提供的更准确、更高效吗?为什么在这种情况下不提倡不要重复造轮子的理念?难道仅仅因为这是微软的设计?实际上,表达式树的关键意义在于其语言中立性。任何语言的编译过程都会生成语法树,这与表达式树在某种程度上是重合的。有了表达式树,就可以轻松地将一种代码转换为另一种等效代码。最常见的例子就是用Linq查询数据库,它可以生成对应的SQL语句。当然,在不需要这种功能的场景下,Linq也不一定会用到表达式树,直接执行即可。有人提到Java并非做不到类似的功能,而是选择不去实现微软十年前已经完成的东西,这是否是一种傲慢的表现?或许Java开发者有一种必须率先尝试的心态,对于C已有的特性则敬而远之。理论上,Java开发者可以通过反射获取Lambda表达式的实现代码,并自行构建语法树,从而扩展Stream API,使其具备类似Linq2SQL的功能。然而,从我使用过的Java ORM框架来看,似乎并没有这样做,大多数情况下还是硬编码在方法中,表达能力受到了很大限制。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号