我在我的项目中有代表ID的对象。scala value class multiple inheritance
假设它是ChairId,TableId,LampId。我希望他们都从GenericId继承。我希望能够致电def f(x: GenericId) = x.id
我希望他们只持有单一的id: String
,所以我想让他们扩展AnyVal。
此外,我想为每种类型提供功能generate
这将产生我具体的ID即我想喜欢的类型的东西ChairId.generate()
我键入了:
sealed abstract class GenericId(val id: String)
final case class ChairId(override val id: String) extends GenericId(id)
final case class TableId(override val id: String) extends GenericId(id
我但如果GenericId会从AnyVal继承,但目前为止没有运气; /我也尝试使GenericId成为一个特性,并使案例类扩展AnyVal与GenericId,但也不会编译:/
Anot她的事TableId.generate()
我可以提供功能generate
伴侣对象,基本上解决了我的问题,但我想知道是否有可能解决,而无需定义伴侣对象? (即通过某种方式implicits)
//编辑
有关评论提供的代码不编译(我想):
sealed abstract class AbstractId(val id: String) extends AnyVal
final case class CatId(override val id: String) extends AbstractId(id)
final case class DogId(override val id: String) extends AbstractId(id)
我不完全确定你在问什么。如果存在多个问题,您可能希望将它们分成多个Stack Overflow问题。 –
请包括您尝试过的代码和编译错误。我认为这会有所帮助。 –