如何在IntelliJ IDEA中生成Scala的setter和getter

4

给出简单的类

class MyClass {
  private var myVar: String = _
}

我如何为myVar生成setter和getter? Code | Generate菜单中显示:
  • Override Methods(重写方法)...
  • Implement Methods(实现方法)...
  • Delegate Methods(委托方法)...
  • 版权
  • equals() 和 hashCode()
  • toString()
  • 伴随对象
IntelliJ版本:14.1.5 操作系统:OS X 10.10.5

7
我猜IntelliJ没有提供这样的功能,因为getter和setter在Scala中并不是惯用语。Scala主要使用不可变类与公共字段(val)相结合,类似于Java类中具有public final字段的情况。 - Zoltán
2个回答

11

@Zoltán 是正确的——在 Scala 中 getters 和 setters 不常见,因为:

  1. Scala 鼓励不可变性
  2. 当你创建一个字段时,Scala 已经自动为你生成了它们——只是它们的命名不符合 Java beans 的约定(你可以通过对谁能看到和修改该字段进行严格限制,例如 final private[this] val,来让 Scala 生成这些方法)。
  3. 由于 #2,你可以从 var someField 转到 private var _someFielddef someField = this._someFielddef someField_=(value: String) = { this._someField = value },而不需要更新使用者的代码。换句话说,这个改变是源代码兼容的(尽管我认为它不是二进制兼容的)。

如果你需要 Java bean 风格的 getters 和 setters,只需用@BeanProperty 注解该字段,scalac 就会为你生成 getter 和 setter:

import scala.beans.BeanProperty

class MyClass {
  @BeanProperty
  var myVar: String = _
}

请注意,要获取布尔属性的 is getter 和 setter,您需要使用 BooleanBeanProperty


2
这样做不起作用,因为bean属性不应该是私有的。 - Avihoo Mamka

4
您可以使用Scala的Bean Property
import scala.beans.BeanProperty

class MyClass {
  @BeanProperty var myVar: String = _
}
  • @BeanProperty - 为属性生成getter和setter方法。(如果bean是val,则只生成getter方法)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接