Case class 无参数替代

Case class without parameters alternative

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

一切都始于以下两个非常简单的classes:

  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 class 作为 命令来查询所有记录 输入 Post。在我当前的设置中,实际编写以下内容会更容易:

case class All extends Request(Posts)

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

case object All extends Request(Posts)

但是在这种情况下,对象 All 将只与它的 id 字段一起实例化一次,这样可以避免 每个请求都有唯一的 ID.

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

提前致谢?

不要使用 case classcase object,而是使用伴随申请。如果每个请求都需要一个唯一的 ID,那么您实际上并不真的需要一个对象。

class All extends Requests(Posts)

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

getPosts(All())

实际的警告是

case classes without a parameter list are not allowed; use either case objects or case classes with an explicit `()' as a parameter list.

所以给这个 class 一个空的参数列表,就像编译器建议的那样:

case class All() extends Requests(Posts)