如何检查哪些隐式是不明确的?

tkqqtvp1  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(279)

我定义了以下隐式转换,这有助于我将一些javascript代码移植到scala:

case class NullableBoolean(value: Boolean)

  implicit def toNullable(boolean: Boolean) = NullableBoolean(boolean)
  implicit def toBoolean(boolean: NullableBoolean) = boolean != null && boolean.value

代码的用法如下:

class SomeClass {
  var x: NullableBoolean = _

  def set(v: Boolean): Unit = {
    x = v
  }

  def someOtherFunction(): Unit = {
    if (x) println("Yes")
    else print("No")
  }
}

val some = new SomeClass

some.someOtherFunction()
some.set(true)
some.someOtherFunction()

在小样本中使用时,一切正常。但是,在实际项目中使用时,我得到了一个错误:
错误:(360,16)类型不匹配;
找到:.nullableboolean
必需:布尔值

if (this.someValue) {

我怀疑这是因为导入了其他隐式转换,使得转换不明确,但我找不到它。是否有某种方法或工具可以向我展示合格的转换或帮助我确定歧义?我尝试过intellij shift-ctrl-q,但它只显示了我对布尔值的转换,以及对字符串的一些转换,看起来不错。

qjp7pelc

qjp7pelc1#

隐式转换不能含糊不清。如果在范围匹配中有多个转换,编译器会抱怨。
调用时能否确认toboolean转换确实在范围内 this.someValue ?

相关问题