我发现自己写了很多(某种)样板代码。例如,说我有以下特征
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
,名称x
,y
和z
更长。编写案例类意味着我必须将所有这些重写为MyClass
的参数。
有没有办法根据我扩展的特征自动生成x: Int, y: Boolean, z: String
构造函数部分?
答案 0 :(得分:5)
我认为您正在寻找的是annotation macro,可以为您处理这项工作。然后,您可以通过编写以下内容来调用此宏:
@FieldsFromTraits
case class MyClass extends Foo with Bar
然后,注释宏可以使用来自特征的信息重写您的案例类。
执行类似操作的库是MetaRest。您可能会尝试调整该实现。我今晚能不能把东西放在一起。