我正在创建一个记忆类。
每个类都记忆一个函数类型,并具有以下定义:
class MemoizedFunction1[-T1, +R](f: T1 => R) {
private[this] val cache = mutable.Map[T1, R]()
def apply(t: T1): R = cache.getOrElseUpdate(t,f(t))
}
这很好地编译并按预期工作。但是,如果我删除修改private[this]
我得到以下错误:
contravariant type T1 occurs in invariant position in type => scala.collection.mutable.Map[T1,R] of value cache
为什么我去掉修饰符后,逆变类型T1突然干扰了Map的不变类型?修饰符如何影响类型参数化?