【问题标题】:How to generate getters and setters for all field of scala in Intellij如何在 Intellij 中为 scala 的所有字段生成 getter 和 setter
【发布时间】:2019-03-24 03:16:30
【问题描述】:

我有以下代码

class TestData {
  private var name : String = _
  private var age : Int = _
}

当我尝试在 java 类(alt + insert)-> generate-> 中生成上述 getter 和 setter 时,它适用于所有可用字段,我可以为多个字段添加。

但是我想在 Scala 中实现同样的事情它不要求字段,而是为第一个字段添加 getter 和 setter。

Google 了 aot,但可以在 Intellij 中找到解决方案。

【问题讨论】:

  • 在 Scala/Functional 编程中不鼓励可变状态。在必要的情况下,它会很好地隐藏在公众视野之外。因此,如果每个人都需要,setter 很少。我强烈建议你重新考虑你的程序设计。

标签: java scala intellij-idea intellij-14


【解决方案1】:

您不应该在 Scala 中使用 vars。尽可能保持一切不可变。

话虽如此,如果你真的想要一个具有可变值的类,你总是可以使用案例类而不是普通类。案例类在幕后为您生成 getter 和 setter。

scala> case class Person(var name: String, var age: Int)
defined class Person

scala> val p1 = Person("billy", 12)
p1: Person = Person(billy,12)

scala> println(p1)
Person(billy,12)

scala> p1.age = 45
p1.age: Int = 45

scala> println(p1)
Person(billy,45)

【讨论】:

    【解决方案2】:

    正如评论所说,强烈不建议在 Scala 中使用可变状态,如果您仍然想这样做,可以执行以下操作:

    class TestData (var name: String, var age: Int)
    

    您可以在那里创建一个对象并将值设置为object.attribute并将值设置为object.attribute = desiredValue

    scala> val t = new TestData("edward", 12)
    t: TestData = TestData@40ce2a1f
    
    scala> t.name
    res2: String = edward
    
    scala> t.name = "Josh"
    t.name: String = Josh
    
    scala> t.name
    res3: String = Josh
    

    您应该使用具有不可变值的类来代替具有可变变量的类。这些选项中的任何一个都将是一种更粗暴的方式:

    class TestData (val name: String, val age: Int)
    case class TestData (name: String, age: Int)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多