は、私は形質の具体的な実装のためのファクトリとしてコンパニオンオブジェクトを使用したいapplyメソッドを使用するジェネリック型のスカラファクトリ?
trait Foo[A, B] {
// implementation details not important
}
...私はインターフェイスを定義し、型パラメータのカップルをとり、次の特性を持っていると仮定します。次のように
object Foo {
def apply[A, B](thing: Thing): Foo[A, B] = {
???
}
private case class FooImpl[A1, B1](thing: Thing) extends Foo[A1, B1]
private case class AnotherFooImpl[A2, B1](thing: Thing) extends Foo[A2, B1]
}
私は工場を使用することができるようにしたい:私も、私はそうのようなコンパニオンオブジェクトでの具体的な実装を隠すので、サブクラス化するのではなく、Foo
インタフェースを使用するようにユーザーを強制したい
val foo = Foo[A1, B1](thing) // should be an instance of FooImpl
val anotherFoo = Foo[A2, B1](thing) // should be an instance of AnotherFooImpl
apply
メソッドを実装するにはどうすればよいですか?このSO postはマークに近いようです。
'A1'と' A2'との関係は何ですか?継承?関係はありませんか? –