案例类没有参数替代

时间:2016-10-11 03:24:16

标签: scala case-class

在一些简单的scala编码练习中,我遇到了案例类的意识形态问题,没有参数构造函数参数重复

这一切都始于以下两个非常简单的类

  trait Namespace

  case class Reply[T](namespace: Namespace, correlation: String, data: Try[T])

  abstract class Request(val namespace: Namespace, val id: String = UUID.randomUUID().toString) {

    def success[T](data: T) = Reply(namespace, id, Try(data))

    def failure(msg: String) = Reply(namespace, id, Failure(new RuntimeException(msg)))
  }

现在让我们假设我有一个实体Post,我想添加All类作为命令来查询{{1}类型的所有记录 }。在我目前的设置中,实际编写以下内容会更容易:

Post

但是在这种情况下,我得到编译器警告,不带参数的案例类已被弃用。所以有人可能会建议将其重写为以下内容:

case class All extends Request(Posts)

但是在这种情况下,对象All将仅与其case object All extends Request(Posts) 字段一起实例化一次,以避免为每个请求设置唯一ID。

您能否建议一种更好的方式来表示id命令,以便不需要复制构造函数参数

提前致谢?

2 个答案:

答案 0 :(得分:5)

实际警告是

  

不允许没有参数列表的案例类;使用任何一种情况   具有显式“()”作为参数列表的对象或案例类。

所以给这个类一个空的参数列表,正如编译器建议的那样:

case class All() extends Requests(Posts)

答案 1 :(得分:0)

请勿使用case classcase object,只需使用随播广告即可。如果你需要为每个请求提供一个唯一的ID,那么你真的不想在这里找到一个对象。

class All extends Requests(Posts)

object All {
  def apply(): All = new All()
}

getPosts(All())