在没有getter的情况下访问Scala字段

时间:2017-03-17 09:58:43

标签: scala

从Groovy迁移到Scala,到目前为止爱Scala。我非常想念Groovy的一件事是,我可以在对象上定义属性/字段,然后只需引用它们而不需要其他类的getter。

例如,在Java中:

public class Fizz {
    private String buzz;

    public Fizz(String buzz) {
        super();

        setBuzz(buzz);
    }

    // Getters and setters for buzz
}

但是在Groovy中:

class Fizz {
    String buzz
}

然后我可以从不同的类中引用buzz,如下所示:

void someMethod(Fizz fizz) {
    if(fizz.buzz == "gnarly!") {
        ...
    }
}

然而,似乎Scala不会这样做,你必须满足于此:

class Fizz(buzz : String) {
  ...
}

def someMethod(fizz : Fizz) : Unit = {
  if(fizz.getBuzz.eq("gnarly!")) {
    ...
  }
}

要使我的Scala代码“ Groovier ”(对于这个用例),我已经决定在我的一些Scala类中添加“helper”方法:

class Fizz(buzz : String) {
  def buzz() : String = { this.buzz }
}

现在允许我像这样访问它们:

def someMethod(fizz : Fizz) : Unit = {
  if(fizz.buzz.eq("gnarly!")) {
    ...
  }
}

我的问题: Scala是否有任何其他机制/设备可以让我完成上述所需的行为而无需编写我所谓的“辅助方法”?

1 个答案:

答案 0 :(得分:3)

实际上确实如此。看看这个nice示例。根据您在主构造函数中声明参数的方式,您将获得以下行为:

  

宣言获取者?二传手?
  ----------- ------- -------
  var是是
  val是否

  默认不是否

此处,default表示您实际上没有valvar声明类参数。因此,只需将val置于其前面,即可立即公开访问该字段。

我希望这有用。