当前位置: 首页 > 面试题库 >

有没有办法禁用Java中的短路评估?

严宏朗
2023-03-14
问题内容

说我有这样的代码:

boolean ret = a() && b() && c() && d() && e();

通常,仅当所有其他调用a()-d()返回true时,才调用e()。是否可能有一些编译器或JVM选项来禁用短路评估,所以无论其他函数的结果如何,都将始终调用e()?

基本上我正在做一个大型系统的UAT,需要测试e(),但是设置确保所有a(),b()等返回true的环境和场景都是非常痛苦的…

编辑:好的,我猜想使用位AND代替逻辑可以提供某种解决方法,但是理想情况下,我正在寻找一种不需要在源代码中进行任何更改的解决方案。出于正式和技术原因(如我所提到的那样,系统很大,我们有在过渡区域之间进行代码的升级和部署以及获得批准的整个过程)。这仅用于测试,生产版本需要启用惰性评估(即使用&&)

事后:

  • “正确”的答案是:不,没有。
  • “有用的”答案:您可以将&&更改为&
  • “我到底做了什么”答案:远程调试系统,在表达式上放置断点,并告诉Eclipse运行e()-_-

问题答案:

没有用于更改布尔表达式求值语义的编译器或JVM选项。

如果您无法修改源,则可能的选项(尽管不能保证)包括:

  • 通过精心设置前提条件,创造性地重新创建您要测试的条件。
  • 使用模拟对象。
  • 破解编译器。
  • 破解JVM。
  • 旋转字节码。

抱歉,所有这些都比编译器/ JVM选项或修改源要困难得多。此外,最后三个选项(以及请求的编译器/
JVM选项或修改源代码)违反了不修改所测试内容的正确测试协议。



 类似资料:
  • 问题内容: 我想知道JavaScript是否具有C#中的&&运算符之类的“短路”评估。如果没有,我想知道是否有一种合理的解决方法可以采用。 问题答案: 是的,JavaScript具有“短路”评估。

  • 问题内容: 给出以下代码: 如果返回,php解释器是否还会检查以后的条件,例如? 如果是这样,那么为什么它在不需要时会做额外的工作呢? 问题答案: 是的,PHP解释器是“惰性”的,这意味着它将尽可能少地进行比较以评估条件。 如果要验证,请尝试以下操作:

  • 我希望我的Xamarin表单应用程序禁用屏幕截图。有办法这样做吗?注意:我在纯Android和iOS版本中找到了解决方案,但我需要Xamarin解决方案。如果有一种方法可以以某种方式嵌入纯Android和iOS解决方案,我也接受这一点。谢谢:)

  • 问题内容: 我有一个UpdateProgress控件,该控件显示为更新面板的所有异步事件的覆盖图(使用CSS)。现在,对于某些EXPAND / COLLAPSE行命令事件,我只是不想显示该updateprogress。 有办法吗? 问题答案:

  • 问题内容: 我希望使用Python函数来帮助我进行计算,但是如果击中a时不立即求值,则该过程可能会花费更长的时间。我认为这可能是经过短路评估的,但我只是想确定一下。另外,有没有一种方法可以在Python中说明如何评估函数? 问题答案: 是的,它会短路: 从文档: 如果iterable的所有元素都为true(或者iterable为空),则返回True。相当于: 因此,当它为False时,该函数立即中

  • 问题内容: 我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但是找不到合适的解决方案。 我发现 可能是一个不错的选择。但是我无法通过一些争论。 使用可能是目前合适的解决方案。我想知道是否有更好的解决方案。 有没有办法在Python中使用PhantomJS? 问题答案: 在python中使用PhantomJS的最简单方法是通过Selenium。最简单的安装方法是 安装NodeJS