gpt4 book ai didi

java - 为什么 float 和 double lambda 参数仅限于 float value set,double value set?

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:31 24 4
gpt4 key购买 nike

阅读 Java Language Specification, Java SE 8 Edition,我在§15.27.1 Lambda Parameters 中看到了一些有趣的东西:

A lambda parameter of type float always contains an element of the float value set (§4.2.3); similarly, a lambda parameter of type double always contains an element of the double value set. It is not permitted for a lambda parameter of type float to contain an element of the float-extended-exponent value set that is not also an element of the float value set, nor for a lambda parameter of type double to contain an element of the double-extended-exponent value set that is not also an element of the double value set.

这似乎意味着 VM 将首先通过值集转换将扩展精度 floatdouble 值映射到(非扩展)float 或 double 值集在评估 lambda 表达式或 lambda 主体之前。然而,该规范没有要求对 lambda 的评估是 FP 严格的,而且似乎不可能制作“strictfp lambda 表达式/主体”。

我想这意味着以下两个语句并不严格等价:

doubleStream.map((operand) -> operand + 2.);

doubleStream.map(new DoubleUnaryOperator() {
@Override
public double applyAsDouble(double operand) {
return operand + 2.;
}
});

这是正确的吗?

JLS 要求 floatdouble lambda 参数的值分别在 float 值集或 double 值集内的原因是什么?

最佳答案

阅读 JSR-335 的终稿,Lambda 规范的 B 部分提到紧跟在“A lambda parameter of type float”段落之后:

The previous seven paragraphs are derived from 8.4.1 "Formal Parameters."

事实证明,§8.4.1 形式参数包含一个措辞相似的段落,涉及方法和构造函数的参数:

A method or constructor parameter of type float always contains an element of the float value set (§4.2.3); similarly, a method or constructor parameter of type double always contains an element of the double value set. It is not permitted for a method or constructor parameter of type float to contain an element of the float-extended-exponent value set that is not also an element of the float value set, nor for a method parameter of type double to contain an element of the double-extended-exponent value set that is not also an element of the double value set.

我一直检查回 JLS 2,发现这段一直都在那里。

因此,问题中的两个陈述实际上是等价的。

关于java - 为什么 float 和 double lambda 参数仅限于 float value set,double value set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com