java – 为什么在ELF中使用JSF为#{1/0}生成“Infinity”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么在ELF中使用JSF为#{1/0}生成“Infinity”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1477字,纯文字阅读大概需要3分钟。
内容图文
![java – 为什么在ELF中使用JSF为#{1/0}生成“Infinity”?](/upload/InfoBanner/zyjiaocheng/782/cfac38a7a45b40388b8c5d9a223504c5.jpg)
我需要一个页面来为实验抛出异常并添加
#{1/0}
index.xhtml.我期望抛出java.lang.ArithmeticException,但表达式在生成的页面上计算为字符串Infinity.除以零之外没有定义除以NaN可能是比Infinity更好的选择,但即使NaN也令人困惑,因为它在Java编程语言中并不直观,其中除以零而不是此返回值来处理除零.
运行
@PostConstruct
public void init() {
int x = 1/0;
}
在一个支持bean中导致预期的java.lang.ArithmeticException:/由零.
除了解释为什么会发生这种情况之外,我还会对抛出异常的方式感兴趣,因为我更喜欢在开发期间应用程序的早期和严重崩溃,而不是显示逻辑(或非逻辑)字符串.
我仔细检查了潜在重复项的大型列表(x / 0 == NaN在其他语言中等),但似乎没有JSF的解释.我不是在寻找任何类型的解决方案(没有问题,我只是意外地发现了这种行为),而是一个解释.
我使用Primefaces 6.2体验过这一点.
解决方法:
这可以通过Expression Language 3.0,Section 1.7.1的规范来解释:
“Binary operator –
A
{/,div}B
- If
A
andB
arenull
, return(Long)0
- If
A
orB
is aBigDecimal
or aBigInteger
, coerce both toBigDecimal
and returnA.divide(B, BigDecimal.ROUND_HALF_UP)
- Otherwise, coerce both
A
andB
toDouble
and apply operator- If operator results in exception, error.”
在这种情况下,A和B是整数,因此它们被强制为Double,并且使用IEE 754浮点运算执行除法…导致INF.
There’s probably no way to thrown an exception, then.
有办法:
>如果A或B(但不是两者)都为空,则规范暗示您将获得NPE.
>在BigInteger和BigDecimal情况下,如果B为零,则divide方法应抛出ArithmeticException.
参考:
> JSR-000341表达式语言3.0 – http://download.oracle.com/otndocs/jcp/el-3_0-fr-eval-spec/index.html
内容总结
以上是互联网集市为您收集整理的java – 为什么在ELF中使用JSF为#{1/0}生成“Infinity”?全部内容,希望文章能够帮你解决java – 为什么在ELF中使用JSF为#{1/0}生成“Infinity”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。