我是Java SE / EE开发人员,但在Scala中是初学者。在Java中,当我有一些应该可以被其他代码访问的私有字段时,我使用getX()
/ setX()
经典样式的getter / setter。但是,不确定Scala怎么样。我注意到在Scala中,字段的getter / setter的命名约定是使用与字段#1相同的名称。那么可以简单地设置字段public
,或者我应该使用这种样式的getter / setter吗?:
private var _value = .....
def value = _value
def value_= (newVal:Int) = _value = newVal
在字段名称本身之前放置下划线是否可以(根据scala命名约定)?
谢谢。
答案 0 :(得分:22)
Scala Style Guide很好地涵盖了这一点。
对于属性的访问者,方法的名称应该是属性的名称。
Scala不遵循Java惯例。 Scala提出了一个观点,即调用者不应该能够区分字段访问和方法调用,这意味着约定是给它们两个相同的名称;因此,如果将字段更改为方法,则减少所需的代码更改量,反之亦然。
在字段名称本身之前放置下划线是否可以(根据scala命名约定)?
Scala约定是为我们想要为私有的字段添加前缀,否则这些字段与公共方法具有相同的名称,或者以零为后缀。这两种方法都是可以接受的。
private var _value = .....
def value = _value
def value_= (newVal:Int) = _value = newVal
但是,在这个例子中,额外的行不是必需的。该约定存在,以便我们可以使用这个较短的版本,然后在/我们需要时更改它更明确的版本,而无需在每个呼叫站点进行更改。
var value:Int = 0
答案 1 :(得分:5)
根据Scala docs:
Scala不遵循预先设置set / get到mutator和accessor方法的Java约定(分别)。相反,使用以下约定:
is
”。这应该只是在没有提供相应的mutator的情况下。 示例:
class Foo {
def bar = ...
def bar_=(bar: Bar) {
...
}
def isBaz = ...
}