从Java中的构造函数创建对象时,我得到一个奇怪的行为

时间:2016-09-20 07:27:26

标签: java intellij-idea constructor comma

我有一个构造函数,它需要一些这样的参数

option.foldLeft(defaultResult)((d,x) => if (condition) valueToResult(x) else d)

当我尝试使用像

这样的新运算符为这个类创建一个对象时
public XYZ(Long param1, boolean param2, Long param3){
  //...
}

(注意假,4之间没有空格)

我的param3总是作为null传递给java 7中的构造函数。但是当我尝试在IntelliJ Idea中调试时计算相同的表达式时,对象创建正常工作。

这种行为是否由于逗号运算符而发生? 。我试过阅读java语言规范,但无法找到任何与此相关的内容。更多的内容写在几个地方,而对象创建逗号(,)作为分隔符而不是操作符。

如果我在params之间放置正常间距,一切正常。有人可以解释这种行为。如果逗号作为运算符工作,那么在创建对象时不应该有编译时错误吗?

修改

感谢每一个人的答案。我无法在生产环境之外复制问题,也许我忽略了一些重要的事情。 请将此问题标记为已结束。

2 个答案:

答案 0 :(得分:2)

这就是我的尝试:

1
false
2

输出是:

{{1}}

也许您需要向我们提供更多信息?

答案 1 :(得分:2)

Java是强类型语言。在您的代码示例中,这意味着如果您的类具有包含3个参数的单个构造函数,则编译器确保必须使用3个参数显式调用构造函数。将逗号视为操作符的运行时情况不会发生,因为在这种情况下结果只有2个参数。

弱类型语言(如JavaScript)中,两个参数而不是三个参数可以生成null作为第三个参数,但不是Java。

所以问题的答案是这在Java中不会发生