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更长。编写case class意味着我必须将它们全部重写为MyClass的参数。

是否有一种方法可以根据我扩展的特征自动生成x: Int, y: Boolean, z: String构造函数部分?


你可以在case类中使用def来覆盖另一个def。这样一来,你就不必首先生成这些vals了。此外,你的trait的所有实现都有val实现它的def吗?如果是这样的话,为什么你要将其作为def而不是val呢? - tkachuko
@tkachuko 假设我到处都使用 val 而不是 def,这有什么帮助吗? - Alec
它有助于进入您正在尝试解决的上下文。您需要某种宏工具:您是否检查了此处提到的库:https://dev59.com/mGAh5IYBdhLWcg3wE_1P? - tkachuko
1个回答

5
我认为您需要的是一个能够处理此任务的注释宏。然后,您可以通过编写以下内容来调用此宏:
@FieldsFromTraits
case class MyClass extends Foo with Bar

注解宏可以使用特质中的信息重写您的案例类。
做类似事情的库是MetaRest。 您可以尝试适应该实现。 我会看看今晚是否能够组织一些东西。

哇!这正是我想的。我想我会尝试适应那个实现。 - Alec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接