如何禁用 Scala 警告“无法在运行时检查此类型测试中的外部引用”

Sum*_*uma 7 warnings scala compiler-warnings

我理解警告“无法在运行时检查此类型测试中的外部引用”的含义(如果最终案例类未在类本身中使用,则它会丢失其“外部”指针)。尽管如此,我还是觉得这个警告非常烦人,因为即使我不匹配类型,它也会显示出来,如下面的代码所示:

object X {
  class B {
    final case class A(a: Int)
  }

  def main(arg: Array[String]) = {

  }
}

Run Code Online (Sandbox Code Playgroud)

除了使case classnot之外,如何禁用此警告final@uncheckedcase class定义之前使用没有帮助。

Mar*_*lic 4

也许作为一种解决方法,我们可以通过将构造函数设为私有来使案例类实际上成为最终的

class B {
  case class X private (s: String)
}
Run Code Online (Sandbox Code Playgroud)

这会阻止继承

class C extends X("") // Error
Run Code Online (Sandbox Code Playgroud)

同时仍然允许apply同伴中的公众进行施工

(new B).X("")         // OK
Run Code Online (Sandbox Code Playgroud)

该错误似乎在dotty中不存在,因此一旦 Scala 3 发布,应该可以恢复到最终的 case 类(可能需要替换正则表达式)。