2013-06-21 37 views
6

經驗可以發現,斯卡拉允許名稱衝突爲對象的私有變量和方法象下面這樣:自同名領域和存取斯卡拉

class Test { 
    private[this] var x = 1 
    def x(): String = this.x.toString 
} 

此代碼是有效的,至少斯卡拉2.10和產生什麼我希望(反編譯成Java):

public class Test { 
    private int x; 

    public String x() { 
     return BoxesRunTime.boxToInteger(x).toString(); 
    } 

    public Test() { 
     x = 1; 
    } 
} 

的問題是,我不知道如果我能靠這種行爲在以後的斯卡拉釋放,因爲我無法找到規範的權威證明這行爲是通過設計。那麼,任何人都可以提出我這樣的知識來源嗎?

更新:我的目標是使用此方法將Hibernate數據模型映射到Scala類。由於沒有簡單的方法可以讓Hibernate支持Scala集合,所以我想將Java集合映射到一個專用字段中,然後將這個Java集合封裝到一個自我標題訪問方法中的Scala集合中。關鍵要求是保持字段和方法具有相同的名稱,因爲我還希望保留邏輯Hibernate集合名稱,例如在HQL中引用它。

+2

爲什麼不直接使用的情況下,類?它會給你這種相同的行爲,如果你想改變x只使用內置的複製功能。 – cmbaxter

+2

有趣的是,如果你從'def x()'離開了parens,它不會編譯 –

回答