2016-03-05 146 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中定義受保護的工廠方法。