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

前端之家收集整理的这篇文章主要介绍了java – 现代JVM中的反射成本(6个起)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

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

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

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

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

猜你在找的JVM相关文章