Scala类型推断不能混合值和引用?

时间:2015-10-05 19:07:48

标签: scala

我正在使用Scala的一些Java API,它看起来像:

public Boolean isBoolValue();
public Boolean getBoolValue();

类型推理引擎似乎也遇到了麻烦,如下:

val fetchedValue = if (isBoolValue()) getBoolValue() else false

推断类型为Any。怎么会?还是我抱错了? 我知道,当thenelse分支有不同的东西时,编译器有时会选择意外的类型,这里我们到处都有布尔值。

当然,如果我将getBoolValue更改为boolean(我显然不能作为API)或者我将类型注释添加到fetchedValue,我的示例会有效。

还有一种更好的方法,然后指定if表达式的预期类型吗?

他们说Scala没有像Java这样的两个布尔值,两个整数等但是我的例子似乎证明了这些原语有两种风格?

1 个答案:

答案 0 :(得分:1)

这有效:

val fetchedValue = if (isBoolValue()) getBoolValue() else false:java.lang.Boolean

但问题是false(在scala中)不是java.lang.Boolean类型,因此Any是正确的。

  

他们说Scala没有像Java这样的两个布尔值,两个整数等但是我的例子似乎证明了这些原语有两种风格?

不,这是另一种方式。 Scala有一个,但是Java有两个,而一个Scala不能和Java一样......