2016-03-05 98 views
1

我不知道为什么这不会编译 - 我试图使用内部类(或特征),使其他对象可以与产生的“RequestReturn”,但只有特质请求和它的后代可以首先构造对象。我可能会采取错误的方法,但不应该在逻辑上工作的代码?我已经将RequestReturn构造函数标记为protected [Request],所以它有理由说类RequestContinue也能够调用构造函数。受保护的斯卡拉内部类构造函数

trait Request { 

    class RequestReturn protected[Request](val x:Any) 

    def fulfill(item:Boolean):RequestReturn = new RequestReturn(item) //this line compiles 
} 

trait RequestContinue extends Request{ 


    override def fulfill(item:Boolean):RequestReturn = new RequestReturn(item) //this won't compile 

} 

错误:(19,54)在类RequestReturn构造RequestReturn不能在性状RequestContinue访问 访问受保护的构造RequestReturn不允许的,因为 包围性状RequestContinue在包....是不是一个的子类 类RequestReturn在性状请求,其中目标被定义 倍率DEF履行(项目:布尔型):RequestReturn =新RequestReturn(项目) ^

回答

3

规则是here

从RequestReturn,后代及其伴侣模块访问;并从请求和它的伙伴模块。

您可以在Request for your use case中定义受保护的工厂方法。