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 class
或 case 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)
在一些简单的 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 class
或 case 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)