如果我有结构自我类型的特征
sealed trait UserView { self: {val userWrapper: UserWrapper} =>
....
}
以及uv
类型的对象UserView
,为什么uv.userWrapper
无效?
答案 0 :(得分:1)
嗯,自我可见的地方?是的,就在您的特征定义或扩展它的对象内部。它只是任何实例必须满足的条件,但它对UserView本身的类型没有任何影响。为什么会这样?它只是对自引用类型的约束。
自我类型对于声明此类约束非常有用,而无需将其放在类型的接口中。因此,您可以声明您的特征在混合时需要一些界面。
如果您希望所有实例都有某个字段,为什么不使用抽象定义:
sealed trait UserView {
def userWrapper: UserWrapper
}
您可以使用def或val来实现它。