scala - 在Scala 2.10中键入对案例类的别名

标签 scala

我正在使用Scala 2.10.2,并且有两个具有相同字段的case类:

case class Foo(id: String, name: String)
case class Bar(id: String, name: String)

我想做这样的事情:
case class Thing(id: String, name: String)
type Foo = Thing
type Bar = Thing

这可以编译,但是当我尝试创建Foo时,我得到:
scala> Bar("a", "b")
<console>:8: error: not found: value Bar
              Bar("a", "b")
              ^

类型别名不适用于案例类吗?

最佳答案

创建案例类时,Scala会自动为其创建一个伴随对象。在您的代码中,您为Thing类型定义了别名,即仅为Thing类定义了别名。您的伴侣对象Thing仍然只有1个名称,没有别名。

一种“修复”方法是创建对伴随对象(不是类型别名)的引用,如下所示:

scala> val Bar = Thing
Bar: Thing.type = Thing

scala> Bar("a", "b")
res1: Thing = Thing(a,b)

“修复”的另一种方法是使用import package.{Thing => Bar}重命名导入的对象。

关于scala - 在Scala 2.10中键入对案例类的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831497/

相关文章:

scala - datastax cassandra java 驱动程序与 scala 转换相关的问题(播放 2.3.x)

database - Querulous -- 它可以用于 MySQL 以外的数据库吗?

java - Scala/Lift 与 Java/Spring。为什么要打架?

scala - Scala 中方法的条件调用

scala - 需要澄清 scala 中的构造函数定义语法

regex - 无法匹配正则表达式中的字符串文字

scala - 隐式和非隐式调用函数

scala - 如何在 Scala 的循环中限制函数调用的速率

java - 抽象方法和可变参数注解

scala - 线性回归中的日期使用以及使用 Spark mllib 将日期转换为数字