scala - 是否可以为伴随对象指定特征?
问题描述
假设我有这个:
trait FormData
case class DepartmentData(id: Long, title: String) extends FormData
和这个伴随对象:
object DepartmentData {
def empty: DepartmentData = ???
def from(value: SomeKnownType): DepartmentData = ???
}
我想要确保所有实现FormData
Trait 的类都具有这两种方法empty
并from
在它们的伴生对象中。
解决方案
我不认为我们可以直接这样做,但是尝试像这样的类型类解决方案
trait FormData
case class DepartmentData(id: Long, title: String) extends FormData
case class EmployeeData(id: Long, title: String) extends FormData
trait SomeKnownType
trait FormDataFactory[T <: FormData] {
def empty: T
def from(value: SomeKnownType): T
}
object FormDataFactory {
def empty[T <: FormData](implicit ev: FormDataFactory[T]): T = ev.empty
def from[T <: FormData](value: SomeKnownType)(implicit ev: FormDataFactory[T]): T = ev.from(value)
implicit object fooDepartmentData extends FormDataFactory[DepartmentData] {
override def empty: DepartmentData = ???
override def from(value: SomeKnownType): DepartmentData = ???
}
implicit object fooEmployeeData extends FormDataFactory[EmployeeData] {
override def empty: EmployeeData = ???
override def from(value: SomeKnownType): EmployeeData = ???
}
}
现在打电话
FormDataFactory.empty[DepartmentData]
FormDataFactory.empty[EmployeeData]
推荐阅读
- oracle - 在 Oracle 中使用表/视图创建时出现编译错误的函数不存在
- javascript - 如何在 Asyncstorage 中设置多个值
- c# - 如何在datagridview中一次选择第1行并使用消息框显示
- java - 直接使用 aws s3 将图像加载到 imageview 而不下载到 android 中的本地存储
- maven - 如何修改 settings.xml 以便如果本地不存在依赖项,请从 Internet 获取
- java - 带有 GraphQL 的 Spring Boot 应用程序运行但无法构建包
- postgresql - 更新的查询在休眠状态下不工作
- mysql - 插入mysql自定义变量后值会改变
- c# - 如何在 ASP.Net Core 中更改路由中的 DateTime 格式?
- docker - 在 Windows 7 上的主机上运行 docker 容器