在一些简单的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
命令,以便不需要复制构造函数参数?
提前致谢?
答案 0 :(得分:5)
实际警告是
不允许没有参数列表的案例类;使用任何一种情况 具有显式“()”作为参数列表的对象或案例类。
所以给这个类一个空的参数列表,正如编译器建议的那样:
case class All() extends Requests(Posts)
答案 1 :(得分:0)
请勿使用case class
或case object
,只需使用随播广告即可。如果你需要为每个请求提供一个唯一的ID,那么你真的不想在这里找到一个对象。
class All extends Requests(Posts)
object All {
def apply(): All = new All()
}
getPosts(All())