在Scala中的不同文件下的同一个包中重复的case类名

时间:2017-10-22 08:58:11

标签: scala

这是两个java scala文件:

--A1.scala--

case class Result(a: String)

class A1    {
    ...
}


--B1.scala--

case class Result(a: String, b: String)

class B1    {
    ...
}

在B1类中,应用了Result个案例类,但实际上,它在A1.scala中使用Result个案例类作为默认值(很奇怪)。是否有任何理由发生这种情况,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:2)

它们是案例类并不重要:在一个包中不能有两个具有相同名称的类。严格来说,不使用标准Java类加载器就可以 : OSGi捆绑allow you to have same class name in two different bundles,但这很可能是一种过度杀伤。

如果它们被编译在一起(在同一个子项目中),你应该得到一个编译错误,所以看起来它们不是。在这种情况下,即使它在开发过程中似乎有效,也只会在运行时选择其中一个类。

  

我怎么能解决这个案子

不要为它们使用相同的名称。或者将它们放入类的伴随对象中:

-- A1.scala
class A1 { ... }

object A1 { 
  case class Result(a: String)
}

-- B1.scala
class B1 { ... }

object B1 {
  case class Result(a: String, b: String)
}

在这种情况下,您将其称为A1.ResultB1.Result