首页 文章

Scala案例类和构造函数

提问于
浏览
3

我发现自己写了很多(某种)样板代码 . 例如,说我有以下特征

trait Foo {
  def x: Int
}

trait Bar {
  def y: Boolean
  def z: String
}

然后我想要一个不多于或少于实现这些的案例类 .

case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar

这似乎并不令人讨厌,但现在想象我的特质每个都有十几个 def ,并且名称 xyz 要长得多 . 编写案例类意味着我必须将所有这些重写为 MyClass 的参数 .

有没有办法根据我扩展的特征自动生成 x: Int, y: Boolean, z: String 构造函数部分?

1 回答

  • 5

    我认为您正在寻找的是能够为您处理这项工作的annotation macro . 然后,您可以通过编写以下内容来调用此宏:

    @FieldsFromTraits
    case class MyClass extends Foo with Bar
    

    然后,注释宏可以使用来自特征的信息重写您的案例类 .

    执行类似操作的库是MetaRest . 您可能会尝试调整该实现 . 我今晚把东西放在一起 .

相关问题