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?@unchecked在case class定义之前使用没有帮助。
也许作为一种解决方法,我们可以通过将构造函数设为私有来使案例类实际上成为最终的
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 类(可能需要替换正则表达式)。