加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 现代JVM中的反射成本(6个起)

发布时间:2020-12-14 19:19:42 所属栏目:Java 来源:网络整理
导读:我想知道现代JVM中反射的成本是否下降,除了代码中最关键的部分外,我们可以在任何地方自由使用它. 例如,如果我想基于用户给出的方法名称作为输入调用方法.现在有两种方法可以实现这个: 使用if / else /开关确定要调用的方法.如果存在大量案例,这显然会是很多

我想知道现代JVM中反射的成本是否下降,除了代码中最关键的部分外,我们可以在任何地方自由使用它.

例如,如果我想基于用户给出的方法名称作为输入调用方法.现在有两种方法可以实现这个:

>使用if / else /开关确定要调用的方法.如果存在大量案例,这显然会是很多代码.
>使用反射来调用方法.这绝对是更少的代码.

澄清:上面只是一个使用反射可以缩短代码量的示例.我只是想知道用一些反射魔法替换大量静态代码是否是一种有效的策略.如果您在类似的路线上做过某些事情,也可以分享任何经验.

最佳答案
不,在我看来,还有另一种方法可以做得更好:使用命令模式和名称/命令实例对的映射.您可以在没有开关或反射的情况下缩放很长的路.它也是多态的 – 远远超过“面向对象”.

如果您不想使用自己的Command,请查看java.lang.Runnable或java.util.concurrent.Callable.如果您愿意,您的方法可以异步执行.

我不清楚用户将如何指定他们希望调用哪种方法.如果使用反射,他们必须拼出类的名称,方法,参数,并知道返回类型.你打算如何向他们展示可能的选择?应用程序中的每个类,每个方法?有什么公平游戏吗?

我认为以一种易于指定和调用的方式提供一系列选择更为合理.我不相信任何基于反射的解决方案都符合这一标准.

你想为用户提供一个选择,但“一切顺利”对我来说似乎并不实用.

至于下面提供的具体示例,包括Spring控制器和服务,我不会使用反射.如果您的用户通过传递HTTP查询参数指定启动或停止,则最好将各个Controller方法映射到您使用REST时考虑的特定URL.我的偏好是清晰度,即使它更加冗长.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读