我的代码归结为工厂初始化一个对象,然后再次使用该对象执行其他操作:
trait Factory[T] {
def initialize(): T;
def finish(t: T): Unit;
}
据我了解,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
,因为编译器似乎将捕获的_
. 我怎样才能让编译器意识到这一点,而不必为它引入一个全新的方法?