我在我的項目中有代表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問題。 –
請包括您嘗試過的代碼和編譯錯誤。我認爲這會有所幫助。 –