我正在使用Scala的一些Java API,它看起来像:
public Boolean isBoolValue();
public Boolean getBoolValue();
类型推理引擎似乎也遇到了麻烦,如下:
val fetchedValue = if (isBoolValue()) getBoolValue() else false
推断类型为Any
。怎么会?还是我抱错了?
我知道,当then
和else
分支有不同的东西时,编译器有时会选择意外的类型,这里我们到处都有布尔值。
当然,如果我将getBoolValue
更改为boolean
(我显然不能作为API)或者我将类型注释添加到fetchedValue,我的示例会有效。
还有一种更好的方法,然后指定if
表达式的预期类型吗?
他们说Scala没有像Java这样的两个布尔值,两个整数等但是我的例子似乎证明了这些原语有两种风格?
答案 0 :(得分:1)
这有效:
val fetchedValue = if (isBoolValue()) getBoolValue() else false:java.lang.Boolean
但问题是false
(在scala中)不是java.lang.Boolean
类型,因此Any
是正确的。
他们说Scala没有像Java这样的两个布尔值,两个整数等但是我的例子似乎证明了这些原语有两种风格?
不,这是另一种方式。 Scala有一个,但是Java有两个,而一个Scala不能和Java一样......