オブジェクトを初期化し、そのオブジェクトを再度使用して追加の操作を行う Factory に要約するコードがあります。
trait Factory[T] {
def initialize(): T;
def finish(t: T): Unit;
}
私がこれを理解しているように、 の結果は、 に関係なく、常に任意の 1 つのインスタンスにinitialize
渡すのに適している必要があります。finish
Factory
T
ファクトリ自体は、何が何であるかわからない時点で呼び出されますT
。
object Minimal {
object StringFactory extends Factory[String] {}
val factories = Map[Int, Factory[_]](0 -> StringFactory)
val factory = factories(0)
// (1)
val obj = factory.initialize()
factory.finish(obj)
// (2)
def wrapper[T](factory: Factory[T]): Unit = {
val obj = factory.initialize()
factory.finish(obj)
}
wrapper(factory)
}
バリアント (2) は機能しますが、バリアント (1) は機能しません。
type mismatch; found : Minimal.obj.type (with underlying type Any) required: _$6
しかし、これを修正する方法がわかりません。それは可能ですか?
コンパイラは、wrapper
それ自体を理解できないメソッドを呼び出すことによって何を得ますか? 私の観点からobj
する_$6
と、コンパイラはそのキャプチャに_
. まったく新しいメソッドを導入することなく、コンパイラにそれを認識させるにはどうすればよいですか?