通过编译以下代码可以重现该错误:
object ReproducingMyError {
trait MyTrait[X] {
def someFunc: X
}
def f[X] = new MyTrait[X] {
var x: X = _
def someFunc: X = x
}
}
生成了2条错误消息.两者都指向
def f[X] = new MyTrait[X] {
^
消息类似:
错误:结构细化中的参数类型可能不会引用在该细化之外定义的抽象类型
错误:结构细化中的参数类型可能不会引用该细化的类型成员
为什么这是编译错误?
最佳答案 如果您不需要在外部公开var(我假设您没有),那么添加显式返回类型可以解决问题:
def f[X]: MyTrait[X] = new MyTrait[X] {
var x: X = _
def someFunc: X = x
}
如果没有明确的类型归属,编译器将推断出有问题的“结构细化”,即看起来像这样的类型:MyTrait [X] {var x:X}.
另一种解决方法是将var声明为私有 – 这样它就不会被外面的任何人看到,因此 – 不会包含在推断的细化类型中.
def f[X] = new MyTrait[X] {
private var x: X = _
def someFunc: X = x
}