首页 > 解决方案 > 类构造函数中的非字段参数?

问题描述

是否有可能有不成为字段的构造函数参数?例如,

class Foo(p1: String, p2: Int) {
    val f1 = p1 * p2
}

我想要的唯一字段是f1, 不是p1and p2。这个想法是从参数中导出字段。

标签: scala

解决方案


这很好 - 两者p1都不p2是这里的字段,只是f1. 使它们成为字段是选择加入而不是选择退出(案例类除外,其中所有参数也是字段,您对此无能为力)。

要使它们成为字段,您必须添加varor val,例如

class Foo(val p1: String, var p2: Int)

编辑:如果您想要一个与参数名称相同但类型不同或其他内容的字段,您可以执行以下操作:

class Foo(p1: String, val p2: Int) {
  //Can be val if you want
  var _p1: Int = (p1 : String).toInt
  def p1: Int = _p1
  def p1_=(p1: Int) = _p1 = p1 //An optional setter
}

这实际上与拥有一个名为 的字段相同p1

如果您还想使用一些复杂的操作来设置字段并使用局部变量,您可以使用块(也可能是辅助构造函数)

class Foo(p1: String, val p2: Int) {
  val _p1: Int = {
    val intermediateVariable: String = p1
    intermediateVariable.toInt
  }
  def p1: Int = _p1

或者

class Foo(val p1: Int) {

  def this(p1: String) = this({
    val uselessIntermediateVariable = p1.toInt
    uselessIntermediateVariable
  })
}

推荐阅读