IDを表すオブジェクトにオブジェクトがあります。スカラ値クラス多重継承
ChairId、TableId、LampIdとしましょう。 GenericIdから継承してほしい。そして私は電話したいと思っていますdef f(x: GenericId) = x.id
私は彼らに1つだけid: String
を保持したいので、私はそれらをAnyValに拡張したいと思います。場合しかし
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
と私:
また、私は私の特定のID、すなわちを生成する機能generate
を提供するために、各タイプの希望私はこれを入力したChairId.generate()
のようなものを入力したいですGenericIdはAnyValから継承していましたが、これまで運がなかったのです。/また、GenericIdを特性にして、GenericIdでAnyValを拡張するようにしましたが、コンパイルも行いません:/
Anot彼女のことTableId.generate()
私はコンパイルオブジェクトを提供することができますちょうど関数generate
とは、基本的に私の問題を解決するが、コンパニオンオブジェクトを定義せずに解決する可能性があるのだろうか? (つまり、暗黙を通じて何らかの形で)コンパイルされないコードを提供するために、コメントに関する
//編集
(と私はしたいと思います):
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質問に分割することができます。 –
試したことのコードとコンパイルエラーを含めてください。それが助けになると思います。 –