2017-07-16 47 views
1

例如,我有下面的類自定義訪問添加到屬性,而不重命名構造函數的參數在斯卡拉

class Person(val name: String) { } 

一些代碼使用這個類調用構造函數命名參數

val person = new Person(name = "Smith") 
println(person.name) 

我需要添加屬性name的自定義訪問器,而不需要像上面那樣制動代碼。因此,重命名構造函數參數的方法並不適合我

class Person(val _name: String) { 
    def name = { 
    println("custom action") 
    _name 
    } 
} 

是否有其他方法?如果不是,這是否意味着對於新類我總是應該手工創建自定義訪問器以確保封裝?

回答

4

您可以使您的主要構造函數爲私有,併爲其添加一些額外的值以避免歧義。

class Person private (_name: String, dummy: Unit) { 
    def this(name: String) = this(name,()) 
    def name: String = { 
    println("custom action") 
    _name 
    } 
} 

new Person(name = "John").name // will print "custom action" 

這是哈克,但我更喜歡對Java 也許 - 我 - 需求 - 它,後來式的訪問器

相關問題