我有一个特质
trait Tt[T]{
//tens of methods
}
和
class St{ tt: Tt[T] =>
type T = //...
//some methods
}
object St{
def apply[T](tt: Tt[T]) = new St with tt //error
}
问题是Tt
的对象是由库生成的。有没有办法避免实现所有这几十种方法而只是注入实例"?
我不能只将它作为参数传递,因为在类中定义的类型变量声明。
无法将类型变量声明提取到type参数。
答案 0 :(得分:2)
class St(val tt: Tt[St#T]) { type T = ... }
您的apply
还有其他内容:St
希望Tt
的类型参数与其自己的类型T
相同(您必须开始为这些类型使用更多字母),但apply
使用T
参数化,这是另一种不同的类型,恰好使用相同的字母。因此,def apply[T](tt: Tt[T]) = new St(tt)
不会编译,它必须是def apply(tt: Tt(St#T)) = new St(tt)