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

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

发布时间:2020-12-14 05:30:48 所属栏目:Java 来源:网络整理
导读:说我有这样的代码: boolean ret = a() b() c() d() e(); 只有当所有其他调用a() – d()返回true时,才会调用e().是否可能有一些编译器或JVM选项来禁用短路评估,所以e()将被总是调用,而不管其他函数的结果如何? 基本上我正在做UAT的庞大的系统,需要测试e(),
说我有这样的代码:
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选项或修改源)违反了正确的测试协议,不修改被测试的内容.

(编辑:李大同)

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

    推荐文章
      热点阅读